[Java] Java API - Java.io 패키지

chael_lo·2021년 5월 28일
0

Java

목록 보기
42/52

Java.io 패키지는 입출력 기능을 제공하기 위한 자료형이 선언된 패키지다.

Java 입출력 자료형의 특징

  • 입력 스트림(시냇물이 흐르는 모양) 또는 출력 스트림만 가능(입출력 스트림 미존재)
  • 스트림을 이용하여 값이 차례대로 전달된다.
  • 스트림의 다단계 연결 가능: 기존 스트림을 이용하여 관계 설정하면 기능의 확장이 일어난다.(사용할 수 있는 메소드가 더 많아질 수 있다.)
  • 입력 장치와 출력 장치가 존재한다.

입력 스트림 또는 출력 스트림 클래스의 구분

Byte Stream - InputSream 클래스, OutputStream 클래스

원시데이터(1byte)로 입력 및 출력 기능을 제공한다.
변형 되지 않는 순수한 데이터를 보낸다.

추상 클래스를 상속 받은 클래스들 예시
FileInputStream, BufferedInputStream, DataInputStream, ObjectInputStream
PrintStream, FileOutputStream, BufferedOutputStream, DataOutputSream

예시

키보드 입력값을 원시데이터로 입력받아 모니터에 출력하는 프로그램
EOF(End Of File: 입력 종료 - Ctrl + Z) 신호를 전달하면 프로그램이 종료하게 만든다.
키보드를 누르면 입력 스트림을 통해 값을 보내고,
엔터를 누르면 스레드가 재실행된다.
read라는 메소드를 이용해 값을 1Byte씩 반환받아 readByte 변수에 저장한다.
입력 종료 신호(Ctrl+Z를 누르면 -1값을 반환해준다)가 전달된 경우 반복문을 종료한다.

System.in
Java에서 기본적으로 제공되며 InputStream 클래스를 상속받아 생성된 키보드 입력 스트림이다.

System.out
Java에서 기본적으로 제공되며 OutputStream 클래스를 상속받은 자식클래스(PrintStream)로 생성된 모니터 출력 스트림이다.

InputStream.read()
입력 스트림에 존재하는 값을 원시데이터(1Byte)로 읽어 반환하는 메소드다.

OutputStream.write(int b)
원시 데이터(1Byte)를 출력 스트림으로 전달하는 메소드다.

IOException
입력 또는 출력 스트림에 문제가 이는 경우 발생되는 예외다.
모든 입력 또는 출력 스트림의 메소드에서는 IOException이 발생할 수 있다.
그래서 예외 처리를 해주는 것이 좋다.

package xyz.itwill.io;

import java.io.IOException;

public class ByteStreamApp {
	public static void main(String[] args) throws IOException {
		System.out.println("[메세지] 키보드를 눌러 값을 입력해 주세요[종료:Ctrl+Z]");
		
		//키보드 입력값을 반환받아 저장하기 위한 변수
		int readByte;
		
		while(true) {
			readByte = System.in.read();
            
                        //입력 종료 신호(Ctrl+Z: EOF >> -1)가 전달된 경우 반복문 종료
                        if(readByte==-1) break;

                        System.out.write(readByte);
		}
        	System.out.println("[메세지] 프로그램을 종료합니다.");
	}
}

실행 결과

Character Stream - Reader 클래스, Writer 클래스(추상 클래스)

인코딩 처리된 문자 데이터(1byte 두개를 묶은 2yte, 변형된 데이터)로 처리하는 입력 또는 출력을 기능을 제공한다. 문자 데이터는 같은 말로 인코딩 데이터라고도 한다.
인코딩은 원시 데이터를 묶어 하나의 문자로 표현되도록 처리하는 작업을 말한다.
텍스트 데이터를 처리할 때 사용한다.

Reader 클래스와 Writer 클래스를 상속 받은 클래스들 예시
inputStreamReader, FileReader, BufferedReader
OutPutStreamWriter, PrintWriter, FileWriter

예시

키보드 입력값을 인코딩 처리된 문자 데이터로 입력받아 모니터에 전달하여 출력하는 프로그램
EOF(End Of File: 입력 종료 - Ctrl + Z) 신호를 전달하면 프로그램이 종료하게 만든다.

InputStreamReader
인코딩 처리된 문자 데이터를 반환 하기 위한 기능을 제공하는 클래스다.
InputStream 인스턴스(입력 스트림)을 전달받아야 입력 스트림 생성이 가능하다.

OutputStreamWriter
인코딩 처리된 문자 데이터를 전달 하기 위한 기능을 제공하는 클래스다.
OutputStream 인스턴스를 전달받아야 출력 스트림 생성이 가능하다.

PrintWriter
인코딩 처리된 문자 데이터를 전달하기 위한 기능을 제공하는 클래스다.
모든 값을 문자 데이터로 변환하여 전달하는 메소드가 추가된 클래스다.

Reader.read()
입력스트림에 존재하는 값을 인코딩 처리된 문자 데이터(2Byte)로 읽어 반환하는 메소드다.

Writer.write(int b)
출력 스트림에 인코딩 처리된 문자 데이터를 전달하는 메소드다.
문자 데이터를 일정 크기만큼 출력 버퍼(임시 메모리)에 모아서 한번에 출력 스트림에 전달한다.

Writer.flush()
출력 버퍼에 저장된 문자 데이터를 출력 스트림으로 전달하는 메서드다.

public class CharactersStreamApp {
	public static void main(String[] args) throws IOException {
		
		System.out.println("[메세지] 키보드를 눌러 값을 입력해 주세요[종료:Ctrl+Z]");

		InputStreamReader in = new InputStreamReader(System.in);
		PrintWriter out = new PrintWriter(System.out);
		
		int readByte;
		
		while(true) {
			readByte = in.read();
			
			if(readByte==-1) break;
            
			out.write(readByte);
			out.flush();
		}
		
		System.out.println("[메세지] 프로그램을 종료합니다.");

	}
}

실행 결과

키보드로 이름과 태어난 년도를 입력받아 이름과 나이를 출력하는 프로그램
InputStreamReader
InputStream 인스턴스를 전달받아 입력 스트림을 확정하여 문자데이터 하나를 반환하는 기능을 제공하는 클래스다.

bufferedReader
bufferedReader 인스턴스를 전달받아 입력 스트림을 확장하여 대량의 문자 데이터를 반환하는 기능을 제공하는 스트림 클래스다.

BufferedReader.readLine()
입력 스트림에 존재하는 모든 입력값을 문자열로 변환하여 반환하는 메소드다.

System.in
Java에서 제공되는 키보드 입력 스트림으로 원시 데이터를 반환하는 기능 제공한다.

System.out
Java에서 제공되는 모니터 출력 스트림으로 원시 데이터 하나를 반환하는 기능을 제공하는 스트림이다.
PrintStream 클래스를 이용하여 생성된 출력 스트림이다.
print() 또는 println() 메소드를 이용하여 모든 값을 원시 데이터로 변환하여 전달한다.

public class ConsoleIOApp {
	public static void main(String[] args) throws IOException {
		
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		
		System.out.println("이름 입력>>");
		String name = in.readLine();
		
		
		System.out.println("태어난 날 입력>>");
		int birthYear = Integer.parseInt(in.readLine());
		int age = Calendar.getInstance().get(Calendar.YEAR) - birthYear+1;
		
		System.out.println("[결과]"+name+"님의 나이는"+age+"살입니다.");
		
	}
}

출력 결과

File 클래스

파일 정보(파일경로, 파일권한, 파일 크기 등)을 저장하기 위한 클래스다.
폴더(디렉토리)도 파일로 인식되어 File 클래스로 표현 가능하다.

profile
천천히 꾸준히

0개의 댓글