아래의 내용은 java_grammer 레파지토리 C07ExceptionFileParsing 디렉터리에 저장되어있는 내용을 정리함
- C03File
Stream 개념 → IO vs NIO → 파일 읽기/쓰기 워크플로우
스트림(stream)은 실제 입력/출력 데이터를 이상화된 흐름으로 표현한 것
운영체제에서 생성되는 가상의 연결 고리로, 시스템 간 데이터 전송의 중간 매개자 역할.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
System.out.println(input);
구조 분석
InputStreamReader: 문자체계 받음 + System.in: 키보드 연결BufferedReader: 입력을 버퍼에 모아 성능 최적화 (하나하나 전달시 느림)버퍼 역할: 데이터를 한 곳에서 다른 곳으로 전송하는 동안 임시 보관 메모리 영역
스트림 종류
| 구분 | byte 기반 | character 기반 |
|------|-----------|----------------|
| 용도 | 바이너리(이미지, 오디오) | 텍스트 파일 |
| 클래스 | FileInputStream | FileReader, FileWriter |
BufferedReader br2 = new BufferedReader(new FileReader("test.txt"));
String line = br2.readLine();
while (line != null) {
System.out.println(line);
line = br2.readLine();
}
특징: Blocking 방식 (스레드 읽기까지 대기), 버퍼는 별도 추가 필요
NIO(New Input Output) 특징
| 메서드 | 반환 | 용도 |
|---|---|---|
Files.readString() | String | 파일 전체 통째로 |
Files.readAllLines() | List<String> | 라인별 분할 |
Path filePath = Paths.get("test.txt");
// 전체 읽기
String st1 = Files.readString(filePath);
System.out.println(st1); // "홍길동1\n홍길동2"
// 라인별 리스트
List<String> strList = Files.readAllLines(filePath);
System.out.println(strList); // ["홍길동1", "홍길동2"]
Path filePath1 = Paths.get("test.txt");
// Files.write(경로, 데이터, 옵션)
Files.write(filePath1, "\n홍길동3".getBytes(), StandardOpenOption.APPEND);
| 옵션 | 동작 |
|---|---|
CREATE_NEW | 새로 만들기 (파일 존재시 에러) |
WRITE | 덮어쓰기 |
APPEND | 끝에 추가 |
| 구분 | IO (java.io) | NIO (java.nio) |
|---|---|---|
| Blocking | O (스레드 대기) | X (동시작업 가능) |
| Thread Safe | O | X |
| Buffer | 별도 추가 | 기본 포함 |
| 실무 사용 | 레거시 | 현대 표준 |
키워드: 블로킹/논블로킹, 동기/비동기 → 작업 성능 최적화 핵심
BufferedReader + System.inFiles.readString() / readAllLines() (NIO 추천)Files.write() + 옵션 (APPEND 주로 사용)Path 객체가 모든 파일 작업의 시작점. Paths.get()으로 절대/상대 경로 모두 처리 가능.