본문 바로가기
BackEnd/Java

IO_OutputStreamWriter & InputStreamReader

by pplucy 2020. 11. 10.

*문자열 보조스트림

 

OutputStreamWriter & InputStreamReader 

: 바이트기반 스트림의 데이터를 지정된 인코딩의 문자 데이터로 변환하는 작업 진행

: 생성자로 넣어진 문자형식으로 인코딩하여 저장할 수 있다.

 

: InputStream과 OutputStream클래스는 바이트 단위의 읽기과 쓰기에 사용되는 클래스 이기 때문에

 이들은 문자열을 읽을 수 없다, 그렇기 때문에 이 바이트단위의 파일을  Characters타입(char/String_Characters취급됨)으로

읽고 쓰려면(저장)  byte단위로 데이터를 읽고 이를 chararacter타입으로 변환할 수 있도록 도와주는 것이

---> OutputStreamWriter/InputStreamReader

 

 

1. OuputStreamWriter

 

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(fileName) , "utf-8")

: FileOutputStream을 통해 저장한(써낸) fieName이라는 파일을 바이트 타입으로 저장할 때,

utf-8  형식의 데이터로 인코딩해서 저장

* 참고 : FileOutputStream -> 그림, 오디오, 비디오, 텍스트 파일 등  모든 종류의 데이터를 바이트형태로 파일에 저장

 

---- hi.txt  ----------> (FileOutputStream) -----------------------> osw -----------------------> 저장

(텍스트 파일) ------->      바이트 타입  --------->  원하는 형태의 문자집합으로 인코딩   --->  저장

 

 

2. InputStreamReader

바이트 기반의 스트림을 문자기반 스트림으로 읽어내는 보조스트림

 

InputStreamReader isr = new InputStreamReader(new FileInputStream(fileName) , "ms949")

: FileInputStream을 통해서 저장되어있던 바이트 타입의 다양한 파일들을 읽어내는데,

  이 때 이 파일들을 ms949형태의 데이터 타입으로 인코딩

* 참고 : FileInputStream -> 그림, 오디오, 비디오, 텍스트 파일 등  모든 종류의 파일들을 읽어낸다.

 

---- hi.txt  ----------> (FileInputStream) ---------------------------> isr -----------------------> 출력

(텍스트 파일) ------->      바이트 타입  --------->  원하는 형태의 문자집합으로 인코딩   ---> 출력

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package com.kh.filter;
 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Scanner;
 
//InputStreamReader : InputStream -> Reader
//OutptStreamWriter : OutputStream -> Writer
public class C_StreamWR {
 
    
    Scanner sc = new Scanner(System.in);
    
    public void writerWithStream() {
        
        System.out.println("파일명을 작성하세요 : ");
        String fileName = sc.nextLine();
        System.out.println("문구를 작성하세요 : ");
        String contents = sc.nextLine();
        
        //OutputStreamWriter
        //OutputStream과 이걸 상속받는 모든 메소드들에서 사용가능
        try(OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(fileName) , "utf-8")) { // (new 기반스트림())-> 기반스트림을 생성자의 매개변수에 넣기(API가 시키는대로)
            
            
        osw.write(contents);
        System.out.println("파일 생성이 완료되었습니다. 프로젝트를 새로고침하세요.");
            
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    
 
    
    
    //InputStreamReader
    public void readerWithWStream() {
        
        
        System.out.println("읽어올 파일명을 작성해주세요 : ");
        String fileName = sc.nextLine();
        
        try(InputStreamReader isr = new InputStreamReader(new FileInputStream(fileName) , "ms949")){
            
            
            int check = 0;
            String res = "";
            while((check = isr.read()) != -1) {
                res += (char)check;
            }
            
            System.out.println(res);
            
            
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
                
        
        
        
    }
 
    
}
 
cs

'BackEnd > Java' 카테고리의 다른 글

JAVA ] 변수선언  (0) 2020.11.10
JAVA 기본적인 코드 다루기  (0) 2020.11.10
IO_FileWriter & FileReader  (0) 2020.11.10
IO_ ObjectInputStream & ObjectOutputStream  (0) 2020.11.01
IO_BufferedInputStream & BufferedOutputStream  (0) 2020.10.31

댓글