ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 입출력 스트림(Stream)
    프로그래밍/JAVA 2022. 8. 10. 21:33
    728x90

     

     

    자바에서 데이터는 스트림을 통해 입출력하게되며 스트림은 단일방향, 연속적으로 흘러가는 것을 의미한다. 스트림은 입출력을 동시에 처리할 수 없는 이유로 데이터를 입력 받아야 할 경우 입력 스트림을 사용하고 데이터를 출력할 경우 출력 스트림을 사용한다. 자바 java.io 패키지에서는 InputStream 클래스와 OutputStream 클래스를 제공하고 입출력 스트림 클래스의 하위 클래스 표현시 접미사를 붙여 표현한다.

     


     

     

    스트림 클래스는 다음과 같이 크게 두 종류로 바이트 기반 스트림, 문자 기반 스트림으로 구분된다.

     

    바이트 기반 스트림은 그림, 멀티미디어 등의 바이너리 데이터를 읽고 출력할 때 사용하며 InputStream과 OutputStream은 바이트 기반 입출력 스트림의 최상위 클래스로 접미사를 붙여 클래스를 구분한다.

    - FileInputStream/FileOutputStream : 파일

    - ByteArrayInputStream/ByteArrayOutputStream : 메모리

    - PipedInputStream/PipedOutputStream : 프로세스

    - AudioInputStream/AudioOutputStream : 오디오 장치

     

    InputStream/OutputStream 클래스는 각각 read(), write() 메소드를 포함하고 있어 읽고 쓰는 기능을 수행한다.

     

    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    
    public class File {
        public static void main(String[] args) {
            String input = "C:\\aiclass\\java\\day10\\input.txt";
            String output = "C:\\aiclass\\java\\day10\\output.txt";
            FileInputStream fis;
            FileOutputStream fos;
            try {
                fis = new FileInputStream(input);
                fos = new FileOutputStream(output);
                int b;
                while ((b = fis.read()) != -1) {   
                // -1 : 데이터가 없다라는 뜻. 따라서, 데이터가 있으면 while 진행
                    fos.write(b);
                    System.out.print((char) b + " ");
                }
                fis.close();
                fos.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

     

    // input.txt
    Hello World! Hello Java!

     

    실행결과
    H e l l o   W o r l d !   H e l l o   J a v a ! 
    Process finished with exit code 0
    ----------------------------------------------------------------
    // output1.txt
    Hello World! Hello Java!

     


     

     

    문자 기반 스트림은 문자 데이터를 읽고 출력할 때 사용한다. Reader와 Writer 는 문자 기반 입출력 스트임의 최상위 클래스이며, 하위 클래스 표현시 접미사로 붙여 클래스를 구분한다.

    - FileReader/FileWriter : 파일

    - CharArrayReader/CharArrayWriter : 메모리

    - PipedReader/PipedWriter : 프로세스

    - StringReader/StringWriter : 문자열

     

    import java.io.FileWriter;
    
    public class File2 {
        public static void main(String[] args) {
            String str = "Hello Java!";
            try{
                FileWriter fw = new FileWriter("output2.txt");
                fw.write(str.charAt(0)); 
                // charAt(index): String문에서 원하는 인덱스 장소의 문자열을 문자로 변환
                fw.write("\t");
                fw.write(str);
                fw.write("\n");
                fw.write("안녕하세요!");
    
                fw.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
    실행결과
    ----------------------------------------------------------------
    // output2.txt
    H	Hello Java!
    안녕하세요!

     

     


     

    PrintWriter 클래스는 문자열을 출력하는 Writer 스트림 속성을 가진 클래스로 OutputStream의 자식 클래스이며 byte 단위 출력 클래스인 PrintStream의 Print 메소드를 모두 구현하여 사용할 수 있음. 반드시 참조변수.close(); 로 닫아주어야한다.

     

     

    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.PrintWriter;
    import java.util.Scanner;
    
    public class File3 {
        public static void main(String[] args) {
            String file1 = "output3.txt";
            String[] arr = {"김사과", "오렌지", "반하나", "이메론"};
            try {
                PrintWriter pw = new PrintWriter(new FileOutputStream(file1));
                for (int i = 0; i < arr.length; i++) {
                    System.out.print(arr[i] + " ");
                    pw.print(arr[i] + " ");
                }
                pw.close(); // 닫지않을 경우 다른곳에서 접근이 불가능하고 파일에 저장이 안됨.
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    실행결과
    김사과 오렌지 반하나 이메론 
    ----------------------------------------------------------------
    // output3.txt
    김사과 오렌지 반하나 이메론

     

     

     

     

     

    728x90

    '프로그래밍 > JAVA' 카테고리의 다른 글

    [Java] 제네릭(Generic) 타입  (0) 2022.08.11
    [Java] 중첩 클래스  (0) 2022.08.11
    [Java] 예외처리(Exception)  (0) 2022.08.10
    [Java] Map 컬렉션 클래스  (0) 2022.08.09
    [Java] Set 컬렉션 클래스  (0) 2022.08.09

    댓글

Designed by Tistory.