개인참고자료/자바(네트워크)

문자 스트림 - 키보드로부터 한 줄씩 입력 받아 파일에 저장(PrintWriter)

경진 2008. 7. 14. 23:01
키보드로부터 한 줄씩 입력 받아 파일에 저장하기

키보드로부터 한 줄 씩 입력받아 파일에 저장하는 예제다. 키보드로부터 한 줄씩 입력 받으려면 System.in과 BufferedReader의 readLine() 메소드를 이용해야 하고 파일에 읽어 들인 내용을 저장하려면 FileWriter, BufferedReader, PrintWriter를 이용해야 한다.

import java.io.*;

public class LineWriter {

    public static void main(String[] args) {
        if(args.length != 1){
            System.out.println("사용법 : java LineWriter 파일명");
            System.exit(0);
        } //if    
       
        BufferedReader br = null;
        PrintWriter pw = null;
        try{
            br = new BufferedReader(new InputStreamReader(System.in));
            pw = new PrintWriter(new BufferedWriter(new FileWriter(args[0])));
            String line = null;
            while((line = br.readLine()) != null){
                 System.out.println("읽어들인 문자열 :" + line);
                pw.println(line);   
            }
        }catch(Exception ex){
            System.out.println(ex);
        }finally{
            try{
                pw.close();
            }catch(Exception e){}
        }
    } // main
}

            br = new BufferedReader(new InputStreamReader(System.in));

System.in을 InputStreamReader의 생성자에 인자로 전달함으로써 문자 단위로 읽어 들이는 Reader로 변환하고, 생성된 InputStreamReader를 BufferedReader의 생성자에 전달함으로써 한 줄 씩 입력받는 readLine() 메소드를 사용할 수 있게 했다.

            pw = new PrintWriter(new BufferedWriter(new FileWriter(args[0])));

args[0] 파일명에 출력하는 FileWriter 객체를 생성한 후, BufferedWriter의 생성자에 FileWriter 객체를 전달함으로써 버퍼를 사용하게 해서 병목현상을 줄일 수 있게 했고, 이러한 BufferedWriter 객체를 다시 PrintWriter에게 전달함으로써 다양한 출력 메소드를 사용할 수 있게 했다.

            String line = null;
            while((line = br.readLine()) != null){
                 System.out.println("읽어들인 문자열 :" + line);
                pw.println(line);   
            }

BufferedReader에 있는 readLine 메소드는 개행문자를 만날 때까지 읽어 들여 개행문자를 삭제한 문자열을 반환한다. 파일의 끝을 만나면 null 값을 반환하게 된다. 이렇게 읽어 들인 문자열은 PrintWriter에 있는 println() 메소드를 이용해서 출력한다 . 이때 중요한 것은 문자열 뒤에 개행문자를 붙여서 출력하는 것이다.

결과 화면