[JAVA] 문자 Stream : BufferedReader / BufferedWriter (파일 복사 예제)

2019. 8. 7. 11:28 JAVA/Java IO

문자 Stream : BufferedReader / BufferedWriter (파일 복사 예제)



BufferedReader / BufferedWriter는 문자 입력 스트림으로부터 문자를 읽어 들이거나 문자 출력 스트림으로 문자를 내보낼 때 버퍼링을 함으로써 문자, 문자 배열, 문자열 라인 등을 보다 효율적으로 처리할 수 있도록 해준다.


InputStreamReader / OutputStreamWriter를 사용하는 경우는 한 문자씩 읽지만 버퍼링을 하게 되면 입출력 스트림으로부터 미리 버퍼에 데이터를 갖다 놓기 때문에 보다 효율적으로 입출력할 수 있다.


BufferedReader / BufferedWriter는 BufferedInputStream / BufferedOutputStream과 기능이 비슷하지만, BufferedInputStream / BufferedOutputStream은 바이트 단위의 처리, BufferedReader / BufferedWriter는 문자(Char) 단위 처리라는 차이가 있다.


시스템 버퍼에 저장하고 처리하는 Buffered의 설명은 아래를 확인하자.


[JAVA] ByteStream : BufferedInputStream / BufferedOutputStream (파일 복사 예제)



* BufferedReader / BufferedWriter 의 생성자


 생성자

설 명 

BufferedReader(Reader in) 

주어진 문자 입력 스트림 in에 대해 기본 크기의 버퍼를 갖는 객체를 생성한다. 

BufferedReader(Reader in , int size) 

주어진 문자 입력 스트림 in에 대해 size 크기의 버퍼를 갖는 객체를 생성한다. 

BufferedWriter(Writer out)

주어진 문자 출력 스트림 out에 대해 기본 크기의 버퍼를 갖는 객체를 생성한다. 

BufferedWriter(Writer out, int size) 

주어진 문자 출력 스트림 out에 대해 size 크기의 버퍼를 갖는 객체를 생성한다. 



* BufferedReader / BuffereWriter의 메소드


BufferedReader / BufferedWriter는 기본적으로 Reader / Writer의 메소드를 상속받아 사용한다.


[JAVA] 문자 Stream : Reader / Writer



아래 2개의 메소드는 새로 추가된 메소드 이다.


BufferedReader 메소드 

설 명 

String readLine() 

한줄을 읽는다. "\n", "\r"을 만날때 까지 읽어온다.


- readLine() 메소드를 사용하면서 문자 읽기를 더 효율적으로 할 수 있게 됐다.

- 기존의 read() 메소드로 한 문자씩 읽어오는 것보다 한줄씩 읽어서 처리하기에 더 간편하다.


BufferedWriter 메소드 

설 명 

String newLine() 

줄을 바꾼다.


- newLine() 메소드로 문자를 출력할 때 줄 바꿈이 필요할 때, 버퍼에 newLine() 메소드를 사용하여 줄 바꿈을 할 수 있다.



* BufferedReader / BufferedWriter 사용 예제 파일 복사



import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Date; public class BufferedReaderWriter { public static void main(String args[]){ FileReader fr = null; FileWriter fw = null; BufferedReader br = null; BufferedWriter bw = null; Date d = null; try{ // "ReadFile.txt" 파일을 읽는 FileReader 객체 생성 // BufferedReader 객체 생성 fr = new FileReader("ReadFile.txt"); br = new BufferedReader(fr); // FileWriter로 파일 "CopyFile.txt"에 출력한다. 기존 파일에 덮어쓴다. // BufferedWriter 객체 생성 fw = new FileWriter("CopyFile.txt", false); bw = new BufferedWriter(fw); String s = null; d = new Date(); // 파일 복사 시작 시간 long start = d.getTime(); // ReadFile.txt 에서 한줄씩 읽어서 BufferedRaeder에 저장한다. while((s=br.readLine())!=null){ // 읽은 데이터(한줄)을 BufferedWriter에 쓴다. // 한줄씩 읽으므로, newLine() 메소드로 줄바꿈을 해준다. bw.write(s); bw.newLine(); } // 복사 완료된 시간을 얻는다. d = new Date(); long end = d.getTime(); System.out.println("복사 시간 : " + (end-start)); }catch(Exception e){ e.printStackTrace(); }finally{ // BufferedReader FileReader를 닫아준다. if(br != null) try{br.close();}catch(IOException e){} if(fr != null) try{fr.close();}catch(IOException e){} // BufferedWriter FileWriter를 닫아준다. if(bw != null) try{bw.close();}catch(IOException e){} if(fw != null) try{fw.close();}catch(IOException e){} } } }


- ReadFile.txt 파일에 데이터를 한줄씩 읽어서 버퍼에 저장한다.

- 읽은 라인을 CopyFile.txt 파일에 출력한다.

- 한줄씩 읽으므로, 한줄 출력 후 newLine() 메소드로 한줄 바꿈 해준다.

- 파일 복사가 완료되면 생성한 Reader /Writer 객체들을 닫아준다.


- "ReadFile.txt" 파일과 "CopyFile.txt" 파일을 확인해본다.



BufferedReaderWriter.zip



JAVA API : BufferedReader

JAVA API : BufferedWriter



출처: https://hyeonstorage.tistory.com/249?category=578560 [개발이 하고 싶어요]