본문 바로가기
알고리즘 PS (백준)/☕️ Java (자바)

자바(java) Reader , Writer - 문자 기반 스트림 + Scanner

by 코딩하는 동현😎 2022. 4. 20.

입출력 스트림의 종류

  • 바이트 기반 스트림 : 그림 멀티미디어, 문자등 모든 종류의 데이터를 받고 보내는 것 가능
  • 문자 기반 스트림 : 문자만 받고 보낼 수 있도록 특화된 스트림

 

문자 기반 스트림에는 입력스트림인 Reader과 Writer가 있습니다.

 


writer 객체

 

writer(int c)

매개 변수로 주어지는 int(4byte)에서 끝 2byte(1개 문자)만 출력 스트림을 보냄

예시) 한 문자씩 출력하기

write(char[] cbuf) , write(String str)

매개변수로 받은 변수들을 파일에 출력한다.

 


예시

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class Main {
    public static void main(String[] args) throws IOException  {
        ///Users/jodonghyeon/Desktop/코딩/Java_Class_Test
        // 
        Writer filewriter  =  new FileWriter("./test.txt");
        char a = 'A';
        char b= 'B';
        filewriter.write(a);
        filewriter.write(b);
        //문자 하나하나씩 출력
        String str  = "\n string \n";
        char cbuf[] = {'a' , 'b' , 'c'};

        filewriter.write(str);
        //문자열을 출력
        filewriter.write(cbuf);
        //문자 배열에 모든 문자를 다 하나씩 출력

        filewriter.flush();
        //출력 버퍼에 잔류하는 모든 문자를 출력
        filewriter.close();
        //출력 스트림 닫음 . 안하면 리소스 누수
    }
}

 

제대로 반영 된게 보임

Reader 객체

 

read()

입력 스트림으로부터 1개의 문자를 읽고 int타입으로 반환

char charData = (char) read();

이렇게 해주면 문자를 얻을 수 있습니다.

 

read(char[] cbuf)

입력 스트림으로부터 cbuf배열에 문자들을 저장한다.

반환값은 읽어들인 문자들의 갯수.

Reader fileReader = new FileReader("./test.txt");
        char [] cbuf = new char[100];
        fileReader.read(cbuf);
        System.out.println(cbuf);
        filereader.close();

텍스트 파일에 있는 내용을 전부 콘솔에 출력합니다.


보조 스트림이란?

다른 스트림과 연결되어 여러가지 편리한 기능을 제공하는 스트림입니다.

자체적으로 입출력 수행할 수 없기 때문에 Reader , writer등에 연결해서 입출력을 수행합니다.

종류가 워낙 많기 때문에 각 종류마다 따로 포스트 하겠습니다.

 

문자 기반 스트림의 보조 스트림

  • 성능 향상 보조 스트림 : BufferdReader , BufferedWriter
  • 프린터 보조 스트림 : PrintWriter  - (PrintWriter pw  = new PrintWriter(reader))

Scanner로 문자기반파일 내용 읽어들이기

//문자기반 입력 스트림
FileReader reader =  new FileReader("./test.txt");

//스캐너인자에다가 문자기반입력스트림을 넣습니다.
Scanner scan = new Scanner(reader);

//다음줄이 있으면
while(scan.hasNext())
{
	//한줄 한줄 내용을 받아들입니다.
    String str = scan.nextLine();
}
반응형

댓글