다연이네

[days25] 보조스트림 - InputStreamReader, PrintStream/ PrintWriter 본문

Java

[days25] 보조스트림 - InputStreamReader, PrintStream/ PrintWriter

 다연  2020. 10. 25. 16:08
반응형

InputStreamReader 

byte[] 값을 문자로 바꾸는 기능 

System.out.print("> 한 문자 입력 ? ");
		InputStream is = System.in;
		
		try {
			int i = is.read(); //한 문자를 int로 받음 read는 0~255 int값 반환하며 next byte로 한바이트로 읽어감
			char one = (char)i;
			System.out.println(one); 
			//한글은 깨진다 왜?
			// UTF-8 알파벳(1) 한글(3) 바이트로 처리
			
		} catch (IOException e) {
			e.printStackTrace();
		}

한글을 입력하면 깨짐 

바이트 값 확인해보기

byte [] buffer = new byte[10]; 
		try {
			int n = is.read(buffer); //한바이트만 읽지말고 있는거 다 읽어서 버퍼에 저장하자
			System.out.println(Arrays.toString(buffer));
			//배 입력시 [-80, -80, 13, 10, 0, 0, 0, 0, 0, 0] 한글3바이트, 2개는 그거
		} catch (Exception e) {
			e.printStackTrace();
		}

 

 

-80, -80, 13 바이트 값을 한 문자로 바꾸는 기능 : InputStreamReader
한 라인으로 읽어가는 기능 : BufferedReader(보조스트림)

	System.out.print("> 문자열 입력 ? ");
		
		ArrayList<Character> list = new ArrayList<Character>();
		InputStreamReader isr = new InputStreamReader(is); 
		
		int one = 0;
		while((one=isr.read())!=-1) {
			list.add((char)one);
		}
		System.out.println(list);
		​

문자 입력 후 ctrl+Z

출력값

PrintStream/ PrintWriter 클래스

바이트스트림  / 문자스트림

출력과 관련된 기능을 제공하는 스트림

- PrintStream

		//InputStream is = System.in;
		PrintStream ps = System.out;
		
		String name = "배다연";
		int age =23;
		
		ps.printf("%s %d\n", name, age);
      		  //배다연 23

- PrintWriter

package test;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class Re13 {

	public static void main(String[] args) {
		String name = "배다연";
		int kor= 90, eng=89, mat=77, tot=kor+eng+mat;
		double avg = tot/3.0;
		String gender = "여자";
		
		String fileName = ".\\src\\days25\\Readthis.txt";
		try {
			FileWriter fr = new FileWriter(fileName, true);
			PrintWriter pw = new PrintWriter(fr);
			pw.printf("%s, %d %d %d %d %.2f %s\n", 
					name, kor, eng, mat, tot, avg, gender);
			
			
			pw.close();
			fr.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
		

	}

}

 

위의 파일을 읽어와 콘솔 창에 출력하기

String fileName = ".\\src\\days25\\Readthis.txt";
		
		File file = new File(fileName);
		
		try(
				FileReader fr = new FileReader(file);
				BufferedReader br= new BufferedReader(fr)
				) {
			String n = null;
			while((n=br.readLine())!=null) {
				System.out.println(n);
			}
			
			
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e1) {

			e1.printStackTrace();
		}

출력값 (아까 입력한 데이터들 누적된 값)

배다연, 90 89 77 256 85.33 여자
김동준, 90 89 77 256 85.33 남자

반응형
Comments