BufferedReader/BufferedWriter는 버퍼를 이용해서 입출력의 효율을 높여준다.
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();
파일에서 특정 문자 또는 특정 문자열을 포함한 라인을 쉬ㅏㅂ게 찾아낼 수 있다.
InputStreamReader/OutputStreamWriter는 바이트 기반 스트림을 문자기반 스트림으로 연결시켜주는 역할을 한다.
그리고 바이트기반 스트림의 데이터를 지정된 인코딩의 문자데이터로 변환하는 작업을 수행한다.
InputStreamReader(InputStream in)
-> OS에서 사용하는 기본 인코딩의 문자로 변환하는 InputStreamReader를 생성한다.
InputStreamReader(InputStream in, String encoding)
-> 지정된 인코딩을 사용하는 InputStreamReader를 생성한다.
String getEncoding()
-> InputStreamReader의 인코딩을 알려 준다.
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)를 이용해서 인코딩을 지정해야 한다.
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를 사용하여 간단하게 처리 가능하다.