char단위의 입출력은 문자열 입출력을 위해 특화된 기법이다.
char단위로 입출력을 수행하는 기본 클래스는 Reader와 Writer추상 클래스다.
Reader클래스의 자식 클래스에는 FileReader, BufferedReader, InputStreamReader가 있고,
Wirter의 자식 클래스에는 FileWriter, BufferedWriter, OutputStreamWriter, PrintWriter가 있다.
여기서 InputStreamReader와 OutputStreamReader 클래스는 byte단위의 데이터 입출력 클래스인 InputStream과 OutputStream을 char 단위의 입출력 클래스인 Reader와 Writer로 변환하는 클래스다.
FileReader/FileWriter
FileReader/FileWriter를 이용한 char 단위의 파일 입출력
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException {
// 파일 객체 생성
File readerWriterFile = new File("src/files/ReaderWriterFier.txt");
// FileWriter를 통한 파일 쓰기(UTF-8모드)
try(Writer writer = new FileWriter(readerWriterFile)){
writer.write("안녕하세요\n".toCharArray()); // 문자열 -> char[]로 변환
writer.write("Hello");
writer.write('\r');
writer.write('\n');
writer.write("반갑습니다.",2,3);
writer.flush();
}
// FileReader를 이용한 파일 읽기(UTF-8모드)
try(Reader reader = new FileReader(readerWriterFile)){
int data;
while((data=reader.read())!=-1){
System.out.print((char)data);
}
}catch(IOException e){}
}
}
BufferedReader/BufferedWriter
BufferedReader, BufferedWriter 클래스를 활용한 입출력 속도 개선
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException {
// 파일 객체 생성
File readerWriterFile = new File("src/files/BufferedFile.txt");
// FileWriter를 통한 파일 쓰기(UTF-8모드)
try(Writer writer = new FileWriter(readerWriterFile);
BufferedWriter bw = new BufferedWriter(writer);){
bw.write("안녕하세요\n".toCharArray()); // 문자열 -> char[]로 변환
bw.write("Hello");
bw.write('\r');
bw.write('\n');
bw.write("반갑습니다.",2,3);
bw.flush();
}
// FileReader를 이용한 파일 읽기(UTF-8모드)
try(Reader reader = new FileReader(readerWriterFile);
BufferedReader br = new BufferedReader(reader);){
int data;
while((data=br.read())!=-1){
System.out.print((char)data);
}
}catch(IOException e){}
}
}
InputStreamReader/OutputStreamReader
Input/OutputStreamReader는 byte 단위로 입출력을 수 행한 객체 Input/OutputStream을 char 단위의 입출력 객체(Reader, Writer)로 변환하게 해준다.
InputStreamReader를 통한 콘솔 입력
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{
public static void main(String[] args) {
try{
InputStreamReader isr = new InputStreamReader(System.in, "UTF-8");
int data;
while((data=isr.read())!='\r'){
System.out.print((char)data);
}
}
catch(IOException e){}
}
}
OutputStreamReader를 통한 콘솔 출력
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) {
try {
OutputStreamWriter osw = new OutputStreamWriter(System.out, "UTF-8");
osw.write("OutputStreamWriter를 이용한\n".toCharArray());
osw.write("콘솔 출력 예제\n");
osw.flush();
System.out.println(osw.getEncoding()); // UTF-8
} catch (IOException e) {
}
}
}
PrinterWriter
PrinterWriter 클래스는 PrinterStream과 같이 다양한 타입의 출력에 특화된 클래스로,
자동 flush 기능이 추가가 되어있다.
PrintWriter를 통한 콘솔 출력
import java.io.PrintWriter;
public class Main {
public static void main(String[] args) {
PrintWriter pw = new PrintWriter(System.out, true);
pw.println("hello");
pw.println(123);
pw.println(3.5);
}
}
'BACK > JAVA' 카테고리의 다른 글
[JAVA] 자바 프로그램의 구조와 실행 과정 (0) | 2022.11.11 |
---|---|
[JAVA] 디자인 패턴 정리 (0) | 2022.11.11 |
[JAVA] byte단위 입출력- InputStream/OutputStream (0) | 2022.10.23 |
[JAVA] 자바로 파일 관리하기(File 클래스) (0) | 2022.10.23 |
[JAVA] 람다식(메서드 구현 축약, 메서드 참조, 생성자 참조) (0) | 2022.10.02 |