반응형

문자 기반(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

+ Recent posts