InputStream
& OutputStream
: 바이트 기반 스트림Reader
와 Writer
가 담당
InputStreamReader
… )Reader
FileReader
InputStreamReader
BufferedReader
StringReader
Writer
FileWriter
OutputStreamWriter
BufferedWriter
StringWriter
beatles.txt
현 폴더로 복사아래의 메소드들을 main
메소드에서 하나씩 실행
☕ Ex01.java
public static final String SONG_PATH = "src/sec12/chap04/beatles.txt";
public static void fileReaderWriterEx () {
Charset charset = StandardCharsets.UTF_8;
// 💡 FileReader & FileWriter
// - 파일에 텍스트를 입출력하는 기본 클래스
try (
FileReader fr = new FileReader(
SONG_PATH, charset
);
FileWriter fw = new FileWriter(
SONG_PATH.replace("beatles", "beatles_1")
, charset
)
) {
int c;
// 💡 한 글자씩 불려오고 출력 후 쓰기
// - 때문에 비효율적. 곧 다룰 Buffered... 사용
while ((c = fr.read()) != -1) {
System.out.print((char) c);
fw.write(c);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static void bufferedReaderWriterEx () {
Charset charset = StandardCharsets.UTF_8;
// 💡 BufferedReader & BufferedWriter
// - 파일 텍스트 입출력에 버퍼 사용
try (
// 💡 기본적으로 8192바이트짜리 🚚 트럭에 실어옴
FileReader fr = new FileReader(
SONG_PATH, charset
);
BufferedReader br = new BufferedReader(fr);
FileWriter fw = new FileWriter(
SONG_PATH.replace("beatles", "beatles_2")
, charset
);
BufferedWriter bw = new BufferedWriter(fw);
) {
String line;
// 💡 한 줄씩 🧺 바구니에 버퍼링해서 읽어옴
// - File... 만 사용하는 것보다 효율적
while ((line = br.readLine()) != null) {
System.out.println(line);
bw.write(line);
bw.newLine(); // 💡 줄 바꿔줌
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}