PHpullh
학습 라이브러리/Java/BufferedReader/Writer 활용

JAVA · 파일/IO

BufferedReader/Writer 활용

버퍼링된 I/O로 파일 읽기/쓰기 성능을 최적화합니다.

파일/IO중급BufferedReaderBufferedWriter파일IO버퍼

핵심 설명

버퍼링된 I/O로 파일 읽기/쓰기 성능을 최적화합니다.

Java code

import java.io.*;
import java.nio.file.*;
import java.nio.charset.StandardCharsets;

public class BufferedIO {
    public static void main(String[] args) throws IOException {
        Path file = Files.createTempFile("buffered", ".txt");

        // BufferedWriter — 쓰기
        try (BufferedWriter writer = Files.newBufferedWriter(
                file, StandardCharsets.UTF_8)) {
            for (int i = 1; i <= 5; i++) {
                writer.write("라인 " + i);
                writer.newLine(); // OS에 맞는 줄바꿈
            }
        }

        // BufferedReader — 읽기
        try (BufferedReader reader = Files.newBufferedReader(
                file, StandardCharsets.UTF_8)) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        }

        // Stream으로 읽기 (대용량에 적합)
        try (var lines = Files.lines(file, StandardCharsets.UTF_8)) {
            long count = lines
                .filter(l -> l.contains("라인"))
                .count();
            System.out.println("매칭 라인 수: " + count);
        }

        // PrintWriter — 편의 메서드
        try (var pw = new PrintWriter(
                Files.newBufferedWriter(file))) {
            pw.println("printf 스타일");
            pw.printf("이름: %s, 나이: %d%n", "홍길동", 30);
        }

        Files.deleteIfExists(file);
    }
}

학습 팁

Files.lines()은 지연(lazy) 스트림이라 대용량 파일도 메모리 효율적입니다. 전체를 메모리에 올리지 않습니다.

주의할 점

BufferedWriter.write()는 자동 줄바꿈을 하지 않습니다. newLine()을 직접 호출하거나 PrintWriter를 사용하세요.

자주 묻는 질문

BufferedReader/Writer 활용란 무엇인가요?

버퍼링된 I/O로 파일 읽기/쓰기 성능을 최적화합니다.

BufferedReader/Writer 활용 학습 시 주의할 점은 무엇인가요?

BufferedWriter.write() 는 자동 줄바꿈을 하지 않습니다. newLine() 을 직접 호출하거나 PrintWriter 를 사용하세요.