Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- multi-threading
- 인텔리제이 기초 설정
- for문
- 상수
- 인텔리제이 한글 깨짐 해결법
- Java데이터 타입
- While
- JAVA객체지향
- 컴파일
- IntelliJ IDEA
- 형 변환
- 포함관계
- 반복문
- 생성자
- 연관관계
- 자바 멀티스레딩
- function
- break문
- 시스템 환경 변수 편집
- 메서드 오버로딩
- JAVA기초
- this예약어
- Java
- 집합관계
- 접근제어지시자
- continue문
- 메서드
- java변수
- Thread
- OPP개념
Archives
- Today
- Total
최원종의 개발 블로그
FileInputStream 본문
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 |

