반응형
문자 기반(2byte) 스트림
이번에는 문자 단위의 입출력 클래스를 사용해 보도록 한다.
문자 기반은 바이트기반 스트림을 2byte단위로 읽어 들이도록 만든 클래스들을 활용한다.
이런 기능의 클래스는 Reader(입력), Writer(출력) 두 인터페이스를 구현하는 클래스들이다.
출력관련 클래스
OutputStreamWriter
BufferedWriter
PrintWriter
FileWriter
입력관련 클래스
InputStreamReader
BufferedReader
FileReader
문자 단위 출력
예제코드
package exam;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
public class Exam {
public static void main(String[] args) throws IOException { // 실습 편의를 위해 예외전가 설정
OutputStreamWriter osw = new OutputStreamWriter(System.out);
BufferedWriter bw = new BufferedWriter(osw, 1024);
PrintWriter pw = new PrintWriter(bw);
File f = new File("test.txt");
FileWriter fw = new FileWriter(f);
BufferedWriter bw1 = new BufferedWriter(fw, 1024);
PrintWriter pw1 = new PrintWriter(bw1);
pw.println(10);
pw.println("test 안녕하세요!");
pw.close();
pw1.println(10);
pw1.println("test 안녕하세요!");
pw1.close();
}
}
실행결과
문자 단위 입력
예제코드(앞에서 출력한 test.txt파일을 이용하거나 생성하여 텍스트 내용을 저장해 두고 실행)
package exam;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Exam {
public static void main(String[] args) throws IOException { // 실습의 편의를 위해 예외 전가
System.out.println("표준입력(키보드)로부터 읽어들인 내용");
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br1 = new BufferedReader(isr);
File f = new File("test.txt");
FileReader fr = new FileReader(f);
BufferedReader br2 = new BufferedReader(fr);
System.out.print("문자열 = ");
String str = br1.readLine();
System.out.println("str = " + str);
System.out.print("숫자 = ");
int x = Integer.parseInt(br1.readLine());
System.out.println("x = " + x);
System.out.println("=======================");
System.out.println("test.txt파일로부터 읽어들인 내용");
while (true) {
String s = br2.readLine();// 한줄 한줄씩 읽는다
if (s == null)
break;
System.out.println("s = " + s);
}
br1.close();
br2.close();
}
}
실행결과
일반적으로 파일에 저장 및 복사하거나 네트워크로 전송하는 경우 바이트 스트림을 이용한다.
입출력 시 문자 단위로 사용해야 하는 경우 위 예제를 참조하여 문자기반 스트림을 사용하면 된다.
다음은 문자기반 입출력을 이용하여 콘솔 메모장을 만든 예제이다.
package exam;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class ConsoleNotepad {
public void consoleToFile(String path, String data) {
File f = new File(path);
FileWriter fw = null;
try {
fw = new FileWriter(f);
fw.write(data);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void fileToConsole(String path) {
File f = new File(path);
if (!f.exists()) {
System.out.println("파일이 존재하지 않습니다.");
return;
}
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
while (true) {
String tmp = br.readLine();
if (tmp == null)
break;
System.out.println(tmp);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
System.out.println("콘솔메모장입니다.");
Scanner in = new Scanner(System.in);
ConsoleNotepad cn = new ConsoleNotepad();
String path = "";
StringBuffer sb = new StringBuffer();
while (true) {
System.out.println("1.저장");
System.out.println("2.출력");
int sel = in.nextInt();
in.nextLine();
switch (sel) {
case 1:
System.out.print("파일을 저장할 경로 : ");
path = in.nextLine();
System.out.println("↓↓↓↓↓ 저장항 내용 ↓↓↓↓↓");
System.out.println("(Enter두번 입력 시 종료)");
while (true) {
String str = in.nextLine();
if (str.equals("")) {
break;
}
sb.append(str + "\r\n");
}
System.out.println("───────────────────");
System.out.println("저장완료");
cn.consoleToFile(path, sb.toString());
break;
case 2:
System.out.print("불러올 파일 경로 : ");
path = in.nextLine();
System.out.println("↓↓↓↓↓불러온 내용↓↓↓↓↓");
cn.fileToConsole(path);
System.out.println("───────────────────");
}
}
}
}
실행하여 결과 확인(저장 및 저장된 파일 내용 출력)
저장
저장된 파일 확인
저장된 파일의 내용 출력하기
문자단위 입출력이 필요한 곳에서 잘 활용하도록 하자.
반응형
'교육자료 > Java' 카테고리의 다른 글
자바의 애노테이션 이해하기 (0) | 2018.10.15 |
---|---|
Java IO 객체 입출력(byte기반 객체단위) (0) | 2017.07.02 |
Java IO 바이트스트림(byte기반) (0) | 2017.06.30 |
Java IO - File class (0) | 2017.06.30 |
Java Thread (쓰레드) (0) | 2017.06.30 |