FileInputStream을 이용한 바이너리 파일 읽기
바이트 스트림으로 파일을 읽는 스트림 클래스는 FileInputStream이며, 생성자와 주요 메소드는 다음과 같습니다.
| 생성자 | 설명 |
| FileInputStream(File file) | file이 지정하는 파일로부터 읽는 FileInputStream 생성 |
| FileInputStream(String name) | name이 지정하는 파일로부터 읽는 FileInputStream 생성 |
| 메소드 | 설명 |
| int read() | 입력 스트림에서 한 비이트를 얻어 int형으로 리턴 |
| int read(byte[] b) | 최대 배열 b의 크기만큼 바이트를 읽음. 읽는 도중 EOF를 만나면 실제 읽은 바이트 수 리턴 |
| int read(byte[] b, int off, int len) | 최대 len개의 바이트를 열어 b 배열의 off 위치부터 저장, 읽는 도중 EOF를 만나면 실제 읽은 바이트 수 리턴 |
| int available() | 입력 스트림에서 현재 읽을 수 있는 바이트 수 리턴 |
| void close() | 입력 스트림을 닫고 관련된 시스템 자원 삭제 |
파일 읽기 스트림 생성
FileInputStream 클래스는 파일과 연경한 바이트 스트림을 생성합니다.
FileInputStream fin = new FileInputStream("c:\\Temp\\test.out");
이 코드를 실행하면 c:\\Temp\\test.out 파일을 찾아 열고, 이 파일을 연결한 스트림 fin을 생성합니다.
파일 읽기
fin.read() 메서드를 호출하면 파일 스트림으로부터 한 바이트를 읽어 리턴한다. read() 메서드를 이용하여 파일에 저장된 바이트들을 읽어 배열 byte b[]에 다시 채우는 코드는 다음과 같습니다.
byte b[] = new byte[6]; // 비어있는 배열
int n = 0, c;
while ((c = fin.read()) != -1) { // 파일 끝(EOF)까지 힌 바이트씩 읽기
b[n] = (byte)c; // 읽은 바이트를 배열에 저장
n++;
}
파일의 끝(EOF)를 만나면 fin.read() 메소드는 -1을 리턴합니다. 이 코드의 끝에 있는 다섯 줄은 다음 한 줄로 바꾸어 한 번에 배열로 읽어 들일 수 있다.
fin.read(b); // 파일에서 배열 b[]의 크기만큼 바이트 읽기
스트림 닫기
더 이상 스트림이 필요없을 때 close() 메소드를 호출하여 스트림을 닫는다.
fin.close(); // 스트림을 닫는다. 더 이상 스트림으로 호출하여 읽을 수 없다.
FileInputStream으로 바이너리 파일 읽기
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamEx {
public static void main(String[] args) {
byte b[] = new byte[6]; // 비어 있는 byte 배열
try {
// "c:\\Temp\\test.out" 파일을 열어 배얄 b에 저장
FileInputStream fin = new FileInputStream("c:\\Temp\\test.out");
int n = 0, c;
while((c = fin.read()) != -1) {
b[n] = (byte) c; // 읽은 바이트를 배열에 저장
n++;
}
// 배열 b[]의 바이트 값을 모두 화면에 출력
System.out.println("c:\\Temp\\test.out에서 읽은 배열을 출력합니다.");
for (int i = 0; i < b.length; i++)
System.out.print(b[i] + " ");
System.out.println();
fin.close();
} catch (IOException e) {
System.out.println("c:\\Temp\\test.out에서 읽지 못했습니다. 경로명을 체크해보세요");
}
}
}
실행 결과
c:\Temp\test.out에서 읽은 배열을 출력합니다.
7 51 3 4 -1 24
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
| File 클래스 (1) | 2025.05.05 |
|---|---|
| 버퍼 입출력과 파일 입출력 (1) | 2025.05.02 |
| 바이트 스트림 클래스와 FileOutputStream를 이용한 바이너리 파일 쓰기 (1) | 2025.04.25 |
| FileWriter를 이용한 텍스트 파일 쓰기 (0) | 2025.04.23 |
| 문자 집합과 InputStreamReader를 이용한 텍스트 파일 읽기 (1) | 2025.04.20 |