char 단위 입출력
- char 단위로 입출력을 수행하는 기본 클래스는 Reader 와 Writer 추상 클래스이다.
Reader 와 Writer의 상속구조
- Reader 클래스의 자식 클래스에는
FileReader, BufferedReader, InputStreamReader가 있고, Writer의 자식 클래스에는 FileWriter, BufferedWriter,OutputStreamWriter,PrintWriter가 있다.
Reader의 주요 메서드
- int skip(long n) - n개의 char 스킵하기(실제 스킵된 char 개수를 리턴)
- int read() - int(4byte)의 하위 2byte에 읽은 데이터를 저장해 리턴
- int read(char[] cbuf) - 읽은 데이터를 char[] cubf에 저장하고, 읽은 char 개수를 리턴
- abstract int read(char[] cbuf, int off, int len) - len 개수만큼 읽은 데이터를 char[] cbuf의 off위치부터 저장(추상 메서드)
- abstract void close() - Reader의 자원 반환
Writer의 주요 메서드
- abstract void flush() - 메모리 버퍼에 저장된 데이터 내보내기(실제 출력 수행)(추상 메서드)
- void write(int c) - int(4byte)의 하위 2byte를 메모리 버퍼에 출력
- void write(char[] cbuf) - 매개변수로 넘겨진 char[] cbuf 데이터를 메모리 버퍼에 출력
- void write(String str) - 매개변수로 넘겨진 String 값을 메모리 버퍼에 출력
- void write(String str, int off, int len) - str의 off 위치에서부터 len 개수를 읽어 메모리 버퍼에 출력
- abstract void write(char[] cbuf, int off, int len) - char[]의 off 위치에서부터 len개수를 읽어 출력(추상 메서드)
- abstract void close() - write의 자원 반환(추상 메서드)
Reader/Writer 객체 생성 및 활용하기
- FileReader 와 FileWriter는 파일로부터 문자열을 일거나 파일에 문자를 저장하는 데 사용되는 클래스로 입출력을 char 단위로 수행한다.
FileReader 생성자
- FileReader(File file) - 매개변수로 넘어온 file을 읽기 위한 Reader 생성
- FileReader(String name) - 매개변수로 넘어온 name 위치의 파일을 읽기 위한 Reader 생성
FileReader 객체 생성
File readerwriterFile - new File("ReaderWriterFile.txt");
Reader reader = new FileReader(readerwriterFile);
FileWriter 생성자
- FileWriter(File file) - 매개변수로 넘어온 file을 쓰기 위한 Writer 생성
- FileWriter(File file,boolean append) - 매개변수로 넘어온 file을 쓰기 위한 Writer 생성,append = true 일때 이어쓰기, false일때 새로 덮어쓰기
- FileWriter(String name) - 매개변수로 넘어온 file을 쓰기 위한 Writer 생성
- FileWriter(String name,boolean append) - name위치의 파일을 쓰기 위한 Writer 생성,append = true 일때 이어쓰기, false일때 새로 덮어쓰기
FileWriter 객체 생성
File readerwriterFile - new File("ReaderWriterFile.txt");
Writer reader = new FileWriter(readerwriterFile);
BufferedReader / BufferedWriter
- char 단위 입출력도 메모리 버퍼를 사용함으로써 속도를 향상할 수 있는 BufferedReader 와 BufferedWriter 클래스를 제공한다.
BufferedReader 생성자
- BufferedReader(Reader in)
- BufferedReader(Reader in, int size)
BufferedReader 생성
File bufferedReaderFile = new File("BufferedReaderFile.txt");
Reader reader = new FileReader(bufferedReaderFile);
BufferedReader br = new BufferedReader(reader);
BufferedReader 추가 메서드
- readLine() - 1줄씩 읽어 문자열로 리턴하는 메서드
- String 타입으로 리턴하다보니 마지막값은 null 이다.
BufferedWriter 생성자
- BufferedWriter(Writer out)
- BufferedWriter(Writer out, int size)
BufferedWriter 생성
File bufferedReaderFile = new File("BufferedReaderFile.txt");
Writer writer = new Writer(bufferedReaderFile);
BufferedWriter bw = new BufferedWriter(writer);
- 입출력 수행시, byte 단위로 입출력을 수행한 객체를 char 단위의 입출력 객체로 전환해야 될 때가 있다. 이때 사용하는 클래스가
InputStreamReader와 OutputStreamWriter이다.
- InputStreamReader : InputStream -> Reader
- OutputStreamWriter : OutputStream -> Writer
- InputStreamReader(InputStream in)
- InputStreamReader(InputStream in, Charset cs)
- InputStreamReader(InputStream in, String charsetName)
File inputStreamReaderTest = new File("test.txt");
InputStream is = new FileInputStream(inputStreamReaderTest);
Reader isr = new InputStreamReader(is,"UTF-8");
OutputStreamReader 생성자
- OutputStreamReader(OutputStream out)
- OutputStreamReader(OutputStream out, Charset cs)
- OutputStreamReader(OutputStream out, String charsetName)
File OutputStreamWriterTest = new File("test.txt");
OutputStream os = new FileOutputStream(inputStreamWriterTest);
Writer osw = new OutputStreamReader(os,"UTF-8");
PrintWriter
- PrintWriter 클래스는 PrinterStream과 같이 다양한 타입의 출력에 특화된 클래스로 자동 flush() 기능이 있다.