Java & Kotlin
[Java 기능] 문자 단위 입출력 스트림
Sue
2022. 2. 17. 11:15
Reader
- 문자 단위 입력 스트림의 최상위 추상 클래스
- 많은 추상 메서드가 선언되어 있고, 이를 하위 스트림에서 상속받아 구현
- 주요 하위 클래스
스트림 클래스 | 설명 |
FileReader | 파일에서 문자 단위로 자료를 읽음 |
InputStreamReader | 바이트 단위로 읽은 자료를 문자로 변환해주는 보조 스트림 |
BufferedReader | 문자로 읽을 때 배열을 제공하여 한꺼번에 읽을 수 있는 기능을 제공하는 보조 스트림 |
- 주요 메서드
메서드 | 설명 |
int read() | 파일로부터 한 문자를 읽음. 읽은 문자 반환 |
int read(char[] buf) | 파일로부터 buf 배열에 문자를 읽음 |
int read(byte b[], int off, int len) | 파일로부터 buf 배열의 off 위치로부터 len 개수만큼의 문자를 읽음 |
void close() | 입력 스트림과 연결된 대상 리소스를 닫음 |
예제 코드
FileReaderTest.java
- "안녕하세요" 라는 한글 문자열을 읽어들임
- FileInputStream을 생성해서 파일을 읽을 경우 바이트 단위로 읽기 때문에 2바이트로 저장되는 한글은 깨짐
package ch15;
import java.io.FileReader;
import java.io.IOException;
public class FileReaderTest {
public static void main(String[] args) {
// try (FileInputStream fis = new FileInputStream("reader.txt")){ // 한글일 경우 깨짐
try (FileReader fr = new FileReader("reader.txt")) {
int i;
while((i = fr.read()) != -1) {
System.out.print((char)i);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Writer
- 문자 단위 출력 스트림의 최상위 추상 클래스
- 많은 추상 메서드가 선언되어 있고, 이를 하위 스트림에서 상속받아 구현
- 주요 하위 클래스
스트림 클래스 설명 FileWriter 파일에서 문자 단위로 자료를 씀 OutputStreamWriter 바이트 단위의 자료를 문자로 변환해 출력해주는 보조 스트림 BufferedWriter 문자로 쓸 때 배열을 제공하여 한꺼번에 쓸 수 있는 기능을 제공하는 보조 스트림
- 주요 메서드
메서드 설명 int write(int c) 한 문자를 파일에 씀 int write(char[] buff) 문자 배열 buf의 내용을 출력 int write(char[] buf, int off, int len) 문자 배열 buf의 off 위치부터 len 개수만큼 문자 출력 int write(String str) 문자열 str 출력 int write(String str, int off, int len) 문자열 str의 off번째 문자로부터 len 개수만큼 출력 void flush() 출력을 위해 자료가 머무르는 출력 버퍼를 강제로 비워 자료를 출력. 소켓 혹은 네트워크에서 가끔 사용 void close() 출력 스트림과 연결된 대상 리소스를 닫음. 출력 버퍼 비워짐 (flush() 호출됨)
예제 코드
FileWriterTest.java
package ch15;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterTest {
public static void main(String[] args) {
try(FileWriter fw = new FileWriter("writer.txt")) {
fw.write('A'); // A 출력
char buf[] = {'B','C','D','E','F','G'};
fw.write(buf); // B~G 출력
fw.write("안녕하세요"); // 문자열 출력
fw.write(buf, 1, 2); // C,D 출력
fw.write("65"); // 숫자 출력
} catch (IOException e) {
}
}
}