Java :: I/O :: 5. 문자기반의 보조스트림

김병철·2022년 9월 19일
0

Java

목록 보기
18/20

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

BufferedReader/BufferedWriter는 버퍼를 이용해서 입출력의 효율을 높여준다.

# BufferedReader 예제

BufferedReader의 readLine()을 이용해서 파일을 라인단위로 읽어서 다음 indexOf()를 이용해서 ';'를 포함하고 있는지 확인하여 출력하는 예제이다.

import java.io.*;

public class Ex15_20 {

	public static void main(String[] args) {
		try {
			FileReader fr = new FileReader("D:\\studySpace\\studyEx\\src\\studyEx\\ch15\\Ex15_20.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);
				}
			}
			br.close();
		} catch(IOException e) {}
	}//main
}
  • 출력 결과 :
1:package studyEx.ch15;
3:import java.io.*;
9:			FileReader fr = new FileReader("D:\\studySpace\\studyEx\\src\\studyEx\\ch15\\Ex15_20.java");
10:			BufferedReader br = new BufferedReader(fr);
12:			String line = "";
13:			for(int i=1; (line = br.readLine())!=null; i++) {
14:				// ";"포함한 라인을 출력한다.
15:				if(line.indexOf(";") != -1) {
16:					System.out.println(i+":"+line);
19:			br.close();

파일에서 특정 문자 또는 특정 문자열을 포함한 라인을 쉬ㅏㅂ게 찾아낼 수 있다.

5.2 InputStreamReader와 OutputStreamWriter

InputStreamReader/OutputStreamWriter는 바이트 기반 스트림을 문자기반 스트림으로 연결시켜주는 역할을 한다.

그리고 바이트기반 스트림의 데이터를 지정된 인코딩의 문자데이터로 변환하는 작업을 수행한다.

# InputStreamReader의 생성자와 메서드

  • InputStreamReader(InputStream in)
    -> OS에서 사용하는 기본 인코딩의 문자로 변환하는 InputStreamReader를 생성한다.

  • InputStreamReader(InputStream in, String encoding)
    -> 지정된 인코딩을 사용하는 InputStreamReader를 생성한다.

  • String getEncoding()
    -> InputStreamReader의 인코딩을 알려 준다.

# OutputStreamWriter의 생성자와 메서드

  • OutputStreamWriter(OutputStream out)
    -> OS에서 사용하는 기본 인코딩의 문자로 변환하는 OutputStreamWriter를 생성한다.

  • OutputStreamWriter(OutputStream out, String encoding)
    -> 지정된 인코딩을 사용하는 InputStreamReader를 생성한다.

  • String getEncoding()
    -> OutputStreamWriter의 인코딩을 알려 준다.

한글윈도우에서 중국어로 작성된 파일을 읽을 때 InputStreamReader(InputStream in, String encoding)을 이용해서 인코딩이 중국어로 되어 있다는 것을 지정해야 한다.

인코딩을 지정하지 않으면 원래 작성된대로 볼 수 없다.

마찬가지로 OutputStreamWriter를 이용해서 파일에 텍스트데이터를 저장할 때 생성자 OutputStreamWriter(OutputStream out, String encoding)를 이용해서 인코딩을 지정해야 한다.


# InputStreamReader와 BufferedReader 사용 예제

import java.io.*;

public class Ex15_21 {

	public static void main(String[] args) {
		String line = "";
		
		try {
			InputStreamReader isr = new InputStreamReader(System.in);
			BufferedReader br = new BufferedReader(isr);
			
			System.out.println("사용 중인 OS의 인코딩 : " + isr.getEncoding());
			
			do {
				System.out.print("문장을 입력하세요. 마치시려면 q를 입력하세요 : ");
				line = br.readLine();
				System.out.println("입력하신 문장 : " +line);
			}
			while(!line.equalsIgnoreCase("q"));
			
//			br.close();		// System.in과 같은 표준입출력은 닫지 않아도 된다.
			System.out.println("프로그램을 종료합니다.");
		}catch(IOException e) {}
	}//main
}
  • 입력 내용 :
asdfasdf
hello
김병철
q
  • 출력 결과 :
사용 중인 OS의 인코딩 : UTF8
문장을 입력하세요. 마치시려면 q를 입력하세요 : asdfasdf
입력하신 문장 : asdfasdf
문장을 입력하세요. 마치시려면 q를 입력하세요 : hello
입력하신 문장 : hello
문장을 입력하세요. 마치시려면 q를 입력하세요 : 김병철
입력하신 문장 : 김병철
문장을 입력하세요. 마치시려면 q를 입력하세요 : q
입력하신 문장 : q
프로그램을 종료합니다.

BufferedReader의 readLine()을 이용해서 사용자의 화면입력을 라인단위로 입력받으면 편리하다.
그래서 BufferedReader와 InputStream인 System.in을 연결하기 위해 InputStreamReader를 사용하였다.

JDK1.5부터는 편하게 Scanner를 사용하여 간단하게 처리 가능하다.

profile
keep going on~

0개의 댓글