JAVA 유용한 클래스

(JAVA)문자 기반 스트림 (키보드,콘솔,파일) -16

mynote6676 2025. 5. 29. 18:55

| 문자 기반 + 키보드 , 콘솔에 대한 입출력 예제

 

========================

사전 기반 지식

========================

InputStream(System.in), OutputStream(System.out) 메서드 안에 System.in이 들어갈 수 있는 이유

 

이름 타입  역활
System.in InputStream 타입 키보드 입력 등 표준 입력 스트림
System.out PrintStream 타입  콘솔 출력 등 표준 출력 스트림

즉, System.in 은 입력 스트림(InputStream) 객체고,

System.out 은 출력 스트림(OutputStream의 하위 타입인 PrintStream)객체야.

 

그러면 InputStream(System.in)처럼 쓸 수 있냐?

마찬 가지로 System.out

핵심 요약

System.in은 InputStream 타입, System.out은 OutputStream의 하위 타입이기 때문에,
해당 타입을 받는 생성자나 메서드에 인자로 전달할 수 있는 것!

package ch03;

import java.io.*;
/**
* 바이트 단위 스트림에 이름 형태
* InputStream(System.in), OutputStream(System.out)
* 문자 기반 스트림에 이름 형태
* (xxx)Reader, (xxx)Writer (문자 기반 형태 네이밍 형식)
*/
public class KeyboardConsoleStream {

	public static void main(String[] args) {
    /**
    *InputStreamReader dml read() 메서드는 하나의 문자를 읽어서
    *그 문자의 유니코드(UTF-8, UTF-16) 값으로 (정수값) 반환합니다.
    */
    
    // 프로그램 목표 : 키보드에서 문자 기반에 스트림을 사용해서 코드로 데이터를 읽어 보자.
    // PrintWriter(OutputStream out, boolean autoFlush) autoFlush--> 자동의 비워준다
    try(InputStreamReader reader = new InputStreamReader(System.in);
    	PrintWriter writer = new printWriter(System.out,ture) 
    ) {
    	System.out.println("텍스트를 입력하세요(종료 하려면 ctrl + 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);
    }
    /**
    *입력된 문자를 콘솔에 출력을 하는데 버퍼는 즉시 비움
    * intellij에서 잘 작동안됨
    */
    writer.flush(); // 즉시 출력 
    } catch (IOException e) {
            /**
             * 예: 키보드 입력 오류, 콘솔 출력오류가 여기서 catch 됨
             */
            System.out.println("입출력중 오류 발생");
        }
    } // end of main
}

 

 

| 문자 기반 + 파일 입출력 예제 코드

 

package ch03;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileStreamBasic {

    public static void main(String[] args) {
        // 함수 호출
        // writeToFile("basic_output.txt");

        // 함수 호출 - 파일에서 텍스트 읽기
        readFromFile("basic_output.txt");
    } // end of 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());
        }
    } // end of writeToFile
    
     public static void readFromFile(String fileName) {
        /**
         * FileReader 는 문자 기반 입력 스트림으로, 파일에서 텍스트를 읽음.
         */
         
        try(FileReader reader = new FileReader(fileName)) {

//             read() 메서드는 한 문자씩 읽어 유니코드 값(정수)로 반환 한다.
//            int charCode = reader.read();
//            System.out.println(charCode);
//            System.out.println((char) charCode);
//            파일에 모든 텍스트를 읽을 수있도록 코딩을 하세요 , -1 은 파일의 끝을 의미한다. 

            int charCode;
            while ( (charCode = reader.read()) != -1 ) {
                System.out.print((char) charCode);
            }

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
728x90