개발자공부 (2021.11~현재)/Java

스트림(stream)을 이용한 클래스 다루기

purplecloud 2021. 12. 10. 18:37

Java에서 직접 입출력을 하지 않고 스트림이라는 흐름을 통해 파일이나 콘솔을 쉽게 다룰 수 있는데

운영체제에 의해 생성되는 가상의 연결고리, 중간 매개자인 스트림을 생성해주는 클래스에는 총 5가지가 있다.

 

1. FileInputStream 클래스
- java.io의 가장 기본이 되는 입력클래스
- 입력 스트림(통로)를 생성해줌
- 버퍼를 사용하지 않기 때문에 느릴 수 있음
- 속도문제를 해결하기 위해 버퍼를 사용하는 다른 클래스와 같이 사용하는 것이 일반적

--> read(): 스트림을 통해 byte단위로 데이터를 읽어옴

2. FileOutputStream 클래스
- java.io의 가장 기본이 되는 출력클래스
- 출력 스트림(통로)를 생성해줌
- 버퍼를 사용하지 않기 때문에 느릴 수 있음
- 속도문제를 해결하기 위해 버퍼를 사용하는 다른 클래스와 같이 사용하는 것이 일반적

--> write(): 스트림을 통해 데이터를 씀(내보냄)

 

3. FileReader 클래스
- FileInputStream 과 유사
- 문자 스트림으로서 문자 단위의 바이트 변환 기능을 가지고 있음
- 바이트 단위가 아닌 문자 단위로 입출력을 실행

 

4. FileWriter 클래스
- FileOutputStream 과 유사
- 문자 스트림으로서 문자 단위의 바이트 변환 기능을 가지고 있음
- 바이트 단위가 아닌 문자 단위로 입출력을 실행

 

5. PrintWriter 클래스
- 문자열을 출력하는 스트림 Writer 속성을 가진 클래스
- OutputStream 의 자식 클래스며 byte 단위출력 클래스인 PrintStream의 Print 메소드를
    모두 구현하여 사용할 수 있음

 

printWriter를 사용하여 배열에 저장된 값을 내보내어 txt파일로 자동으로 저장하게 만드는 기능을 구현하였다.

여전히 outputStream을 이용하여 통로를 만들어주어야 한다.

배열의 길이만큼 무한으로 돌면서 해당 인덱스의 value를 output3.txt에 내보내고 저장한다.

이 프로그램을 돌리고 나면 자동으로 output3.txt가 저장되어 있다.

import java.io.FileOutputStream;
import java.io.PrintWriter;

public class File7 {
    public static void main(String[] args) {
        String file1= "output3.txt";
        String[] arr={"김사과","오렌지","반하나","이메론"};

         try{
//             FileOutputStream fos= new FileOutputStream(file1);
//             PrintWriter pw= new PrintWriter(fos);
//             ===
             PrintWriter pw=  new PrintWriter(new FileOutputStream(file1));
             for(int i=0; i<arr.length;i++){
                 System.out.println(arr[i]+" ");
                 pw.println(arr[i]);
             }
             pw.close(); // 스트림 사용후 마지막에는 닫아줘야 올바르게 파일이 저장된다.
         }catch (Exception e){
             e.printStackTrace();
         }
    }
}