최원종의 개발 블로그

FileInputStream 본문

Java/JAVA 유용한 클래스

FileInputStream

chl6698 2026. 3. 20. 15:38

FileInputStream은 파일에서 데이터를 1바이트씩 읽어오는 스트림.

항목 내용
패키지 java.io
상위 클래스 InputStream
읽기 단위 1바이트
용도 텍스트, 이미지, 동영상 등 모든 파일 읽기

 

 


-코드 1

package io.ch14;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class MyFileInputStream {

    public static void main(String[] args) {

        //파일을 바이트 단위로 읽어 들이는 스트림
        FileInputStream in = null;
        int readData;

        try {
            in = new FileInputStream("a.txt");

            //첫 번째 바이트 읽기
            readData = in.read();
            System.out.println("readData : " + readData);
            System.out.println("readData : " + (char) readData);

            //두 번째 바이트 읽기
            readData = in.read();
            System.out.println("readData : " + readData);
            System.out.println("readData : " + (char) readData);

            //세 번째 바이트 읽기
            readData = in.read();
            System.out.println("readData : " + readData);
            System.out.println("readData : " + (char) readData);

        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if (in != null) {
                try {
                    in.close();
                }              // finally 안에서 또 try-catch
                catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        //주의 : 여기서 in.close() 를 하지 않으면
        //즉, 스트림을 닫지 않으면 파일이 계속 열린 상태로 메모리 누수가 생김.
    }
}

- 파일 전체 읽기 + try-with-resources

try-with-resources 란 try ( … ) 괄호 안에 스트림을 선언하면, try 블록이 끝날 때 자동으로 close()를 호출해 주는 해주는 문법

 

-코드 2

package io.ch14;

import java.io.FileInputStream;

public class MyFileInputStream2 {

    public static void main(String[] args) {

        // 주의 a.txt 파일에서 바이트 단위로 데이터를 읽어서 콘솔에 출력할 예정
        // 한글이 있다면 깨짐 발생

        try (FileInputStream in = new FileInputStream("a.txt")) {
            // 파일에서 더 이상 읽을 데이터가 없으면 -1을 반환
            int readData; // 한 바이트씩 데이터를 읽을 메모리 공간 선언

            while ((readData = in.read()) != -1) {
                System.out.print((char) readData);
            }

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        // try 블록이 끝나면 in.close() 가 자동으로 호출 됩니다 (실수를 방지)
        // try-with-resource 구문을 사용한다.

    } // end of main
} // end of class
1번코드(MyFileInputStream)방식:
  파일 열기 → 읽기 → close() 직접 호출 (빠뜨리면 메모리 누수)
  finally 에서 또 try-catch 해야 해서 코드가 복잡함

2번코드(MyFileInputStream2) 방식 (try-with-resources):
  try (파일 열기) → 읽기 → 블록 끝나면 자동 close()
  close() 를 빠뜨리는 실수 자체가 불가능

주요 메서드 정리

메서드 설명
int read() 1바이트 읽기. 반환값: 읽은 바이트(0~255) 또는 -1(끝)
int read(byte[] b) 배열 크기만큼 읽어서 배열에 저장. 반환값: 실제 읽은 바이트 수
int available() 읽을 수 있는 남은 바이트 수 반환
void close() 스트림 닫기

 

 

핵심 요약

FileInputStream
  - 파일에서 바이트 단위로 읽음
  - read() 반환값이 -1 이면 파일 끝 → while 문 종료 조건으로 사용
  - 반드시 close() 해야 함 → try-with-resources 사용 권장
  - 한글 텍스트는 깨질 수 있음 → 16단원 FileReader 에서 해결

'Java > JAVA 유용한 클래스' 카테고리의 다른 글

FileInputStream / FileOutputStream 실습 코드_1  (0) 2026.03.23
FileOutputStream  (0) 2026.03.20
자바 표준 입출력( 키보드, 콘솔)  (0) 2026.03.20
자바 I/O 개론  (0) 2026.03.20
멀티 스레딩(multi-threading)  (0) 2026.03.13