필기노트

자바 FileReader & FileWriter (문자 입출력 스트림) 본문

JAVA

자바 FileReader & FileWriter (문자 입출력 스트림)

우퐁코기 2023. 2. 21. 05:24
반응형

바이트 입출력 스트림의 최상위 클래스는 다음과 같다.

InuptStream, outputStream

 

이와 유사하게 문자 입출력 스트림의 최상위 클래스는 다음과 같다.

Reader, Writer

 

그리고 문자 단위 파일 입출력 스트림은 다음과 같다.

FileReader, FileWriter

바이트 스트림의 FileInputStream, FileOutputStream과 각각 대응한다.

 

문자 스트림에도 버퍼 필터 스크림을 추가할 수 있다.

BufferedReader, BufferedWriter

바이트 스트림의 입출력 버퍼 필터 스트림 BufferedFileInputStream, BufferedOutputStream과 각각 대응한다.

 

문자열의 입출력은 버퍼링의 유무에 따른 성능의 차이가 큰 것을 인식하고,

문자열을 입출력 할 때에는 반드시 버퍼 필터 스트림을 연결해야 한다.

 

■ BufferedWriter

import java.io.*;

class StringWriter
{
    public static void main(String[] args) throws IOException
    {
        BufferedWriter out = new BufferedWriter(new FileWriter("String.txt"));
        
        out.write("박지성 - 메시 멈추게 하는데 집중하겠다.");
        out.newLine();
        out.write("올 시즌은 나에게 있어 최고의 시즌이다.");
        out.close();
        System.out.println("기사 입력 완료.");
    }
}

 

■ BufferedReader

import java.io.*;

class StringReader
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader in = new BufferedReader(new FileReader("String.txt"));
        
        String str;
        while(true)
        {
            str=in.readLine();		// 12행
            if(str==null)
                break;
                
            System.out.println(str);	// 16행
        }
        in.close();
    }
}
  • 12행 : 문자열을 읽기 위해서 readLine 메소드를 호출하고 있다. 그런데 여기서 말하는 문자열 데이터는 개행을 기준으로 나뉨에 주목해야 한다. 즉 문자열 데이터를 읽는다는 뜻은 개행이 등장하기 전까지의 데이터를 한번에 읽는다는 뜻으로 해석할 수도 있다. 그리고 readLine 메소드는 더 이상 읽어 들일 문자열이 존재하지 않으면 null을 반환한다.
  • 16행 : print 메소드가 아닌 println 메소드가 호출되고 있음에 주목하자. 우리는 분명 12행에서 문자열을 입력 받았다. 그리고 이 문자열은 개행을 기준으로 구분된다고 하였다. 그런데 중요한 것은 정작 읽어 들인 문자열 데이터에는 개행이 존재하지 않는다는 사실이다. 즉 개행은 문자열을 구분하는 용도로만 사용되고 버려질 뿐이다. 따라서 문자열 단위로 데이터를 읽어 들인 다음에, 문자열 단위로 개행을 하겠다면 print 메소드가 아닌 println 메소드를 호출해야 한다.

 

■ PrintWriter

문자 필터 스트림 중 하나인 PrintWriter는 다양한 형태의 데이터를 문자열의 형태로 추력하거나(println),

문자열의 형태로 조합하여 출력한다(printf).

import java.io.*;

class PrintWriterStream
{
    public static void main(String[] args) throws IOException
    {
        PrintWriter out = new PrintWriter(new FileWriter("printf.txt"));
        
        out.printf("제 나이는 %d살 입니다.", 24);
        out.println("");
        
        out.println("저는 자바가 좋습니다.");
        out.print("특히 I/O 부분에서 많은 매력을 느낍니다.");
        out.close();
    }
}

 


출처 : 난 정말 JAVA를 공부한 적이 없다구요! - Chapter24 파일과 I/O 스트림

반응형
Comments