본문 바로가기

Java

java IO) - 문자 기반 스트림

앞서 바이트 기반 스트림을 익혔다  5.28

https://notion6780.tistory.com/94

 

java) java 입출력 I/O, 키보드 입력스트림

⭐자바 입출력 I/Oinput/output데이터를 읽고 쓰는 기능을 제공한다파일, 네트워크, 콘솔 등 다양한 소스와 대상 간 데이터를 주고받는다. 먼저 I/O 시스템은 크게 네 가지 주요 구성 요소로 나눈다

notion6780.tistory.com

바이트 기반 스트림 예제

https://notion6780.tistory.com/95

 

java) java 파일 입력스트림, 출력스트림 예제

예제)txt 파일로부터 입력스트림을 받아봤다.public class MyFileInputStream { public static void main(String[] args) { //파일을 바이트 단위로 읽어들이는 방법 FileInputStream in = null; int readData; try { in = new FileInputStr

notion6780.tistory.com

 

여기서는 문자 기반 스트림에 대해 기술한다.

 

⭐문자 기반 스트림
이미지, 비디오, 실행파일 등을 다룰 수 있다.
일반적으로 문자 기반 스트림을 쓰는 것이 편하다.

 

바이트 기반 스트림을 이용하려면 형변환에 유니코드..

해야할 일이 많아 불편하다.


더 편리한 문자 기반 스트림을 알아본다.

 

✨ 바이트 기반 스트림의 이름 형태
inputStream(System.in), OutputStream(System.out)

✨ 문자 기반 스트림의 네이밍 형식
xxxReder, xxxWriter

ex) InputStreamReader 의 read() 메서드는
하나의 문자를 읽어서 그 문자의 유니코드 (utf-8,utf-16) 로 정수값을 반환한다.

 

예제)

키보드에서 문자기반 스트림을 사용해 코드로 데이터를 읽어보자

public static void main(String[] args) {

        try(InputStreamReader reader = new InputStreamReader(System.in);
        PrintWriter writer = new PrintWriter(System.out, true)){
            System.out.println("텍스트를 입력하세요(종료:Ctr+D)");

//            int charCode = reader.read();
//            System.out.println("===== ===== =====");
//            System.out.println((char)charCode);

            int charCode;
            while ((charCode = reader.read()) != -1) {
                //System.out.println((char)charCode);
                writer.println((char) charCode);
            }
            // 입력된 문자를 콘솔에 출력하고 버퍼를 즉시 비운다

            writer.flush();//즉시출력

        } catch (IOException e) {
            /* ex) 키보드 입력오류
            콘솔 출력 오류 등이 여기서 catch 된다. */
            System.out.println("입출력중 오류 발생");
        }//try-catch

    }//main

 

예제)

문자 기반 스트림을 사용해서

문자열을 파일에 입력하고

그 파일을 다시 읽어오는 코드를 작성해보자

/* 파일에 텍스트를 쓰는 함수, 문자 기반 스트림 사용 */
    public static void writeToFile(String fileName) {
       
        /* FileWriter는 문자 기반 스트림으로 텍스트를 파일에 기록할 수 있다 */
        try (FileWriter writer = new FileWriter(fileName)) {
            //파일에 기록할 텍스트 선언
            String text = "자바 문자 기반 스트림 예제\n";
            writer.write(text); //파일이 없다면 생성한 뒤 텍스트 입력
            writer.write("추가 문자열");

            //스트림 비우기
            writer.flush();

            System.out.println("텍스트를 성공적으로 기록했다");

        } catch (IOException e) {
            System.out.println("파일을 쓰던 중 오류 발생:" + e.getMessage());
        }//try-catch
    }//writeToFile
    /* 파일에서 텍스트를 읽어오는 함수 */
    public static void readFromFile(String FileName) {

        /* FileReader 는 문자기반스트림이다 파일에서 텍스트를 읽는다 */
        try(FileReader reader = new FileReader(FileName)){
            /* read() 메서드는 한 문자씩 읽어 유니코드로 정수값 반환한다 */

            //파일에 모든 텍스트를 읽을 수 있도록 코딩
            int charCode;
            while ((charCode = reader.read()) != -1) {
                System.out.print((char)charCode);
            }

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }//readFromFile

 

테스트코드

    public static void main(String[] args) {
        //파일에 문자열 입력
       writeToFile("basic_output.txt");

        //파일에서 텍스트 읽기
        // readFromFile("basic_output.txt");
    }//main

txt파일이 생성되고 문자열 입력에 성공했다

    public static void main(String[] args) {
        //파일에 문자열 입력
    //    writeToFile("basic_output.txt");

        //파일에서 텍스트 읽기
        readFromFile("basic_output.txt");
    }//main

파일에 적힌 문자열을 읽어와 콘솔창에 출력해봤다.