[Java][I/O] 문자기반의 보조스트림

2022. 6. 27. 12:54JAVA/Language

1. BufferedReader & BufferedWriter

BufferedReader / BufferedWriter는 버퍼를 이용해서 입출력의 효율을 높일 수 있도록 해주는 역할을 수행합니다.

	@Order(1)
	@Test
	void bufferedReaderTest() {
		try(FileReader fr = new FileReader("./src/ch15/ex_10_BufferedReader_BufferedWriter/BufferedReaderWriterTest.java");
				BufferedReader br = new BufferedReader(fr)){
			
			String line = "";
			for(int i = 1; (line = br.readLine()) != null; i++) {
				// ";"를 포함한 라인을 출력한다.
				if(line.indexOf(";") != -1) {
					System.out.println(i + ":" + line);
				}
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
1:package ch15.ex_10_BufferedReader_BufferedWriter;
3:import java.io.BufferedReader;
4:import java.io.FileNotFoundException;
5:import java.io.FileReader;
6:import java.io.IOException;
8:import org.junit.jupiter.api.Order;
9:import org.junit.jupiter.api.Test;
13:	 * title : BufferedReader를 이용하여 ";"를 포함한 라인을 탐색
20:		try(FileReader fr = new FileReader("./src/ch15/ex_10_BufferedReader_BufferedWriter/BufferedReaderWriterTest.java");
23:			String line = "";
24:			for(int i = 1; (line = br.readLine()) != null; i++) {
25:				// ";"를 포함한 라인을 출력한다.
26:				if(line.indexOf(";") != -1) {
27:					System.out.println(i + ":" + line);
31:			e.printStackTrace();
33:			e.printStackTrace();

위 예제는 BufferedReader 보조스트림을 이용하여 세미콜론(';')이 포함된 라인을 출력하는 예제입니다.

 

2. InputStreamReader & OutputStreamWriter

InputStreamReader / OutputStreamWriter는 바이트기반 스트림을 문자기반 스트림으로 연결시켜 주는 역할을 수행합니다. 그리고 바이트기반 스트림의 데이터를 지정된 인코딩의 문자데이터로 변환하는 작업을 수행합니다.

 

InputStreamReader의 생성자와 메서드

OutputStreamWriter의 생성자와 메서드

 

다음 예제는 InputStreamReader, OutputStreamWriter를 사용하여 사용자로부터 문장을 입력받고 파일에 입력하는 예제입니다.

	@Order(1)
	@Test
	void InputStreamReaderTest() {
		String line = "";
		try (InputStreamReader isr = new InputStreamReader(System.in);
			BufferedReader br = new BufferedReader(isr);
			OutputStreamWriter osw = 
					new OutputStreamWriter(
							new FileOutputStream(
									"./src/ch15/ex_11_InputStreamReader_InputStreamWriter/result.txt"))){
			System.out.println("사용중인 OS의 인코딩 : " + isr.getEncoding());
			
			do {
				System.out.println("문장을 입력하세요. 마치시려면 q를 입력하세요.>");
				line = br.readLine();
				System.out.println("입력하신 문장 : " + line);
				osw.append(line+"\n");
			}while(!line.equalsIgnoreCase("q"));
			
			System.out.println("프로그램을 종료합니다.");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
input
ehhawefio
aoawefioj
q

result.txt
ehhawefio
aoawefioj
q

 

References

source code : https://github.com/yonghwankim-dev/java_study/tree/main/ch15
[도서] Java의 정석, 남궁 성 지음