11일차 수업 ( Java I/O , 표준입출력 )

1. 자바 I/O
. 용어 정리
 입력(input)                                                   출력(output)
 (입력스트림)                                                (출력스트림)
소스(source) --------자바프로그램 --------> 대상(sink)
 

 . 스트림의 데이터 종류?
 => 자바 프로그램에서 I/O 가능한 데이터 종류
 a. byte : 바이너리(binary) 데이터 처리시 사용.
 b. char : 문자 데이터 처리시 사용.
 

. 자바 I/O 클래스 제공.
 a. byte
 ==> 입력 최상위 클래스 : InputStream
     - FileInputStream (파일읽기)
     - ObjectInputStream
     출력 최상위 클래스 : OutputStream
     - FileOutputStream (파일출력)
     - ObjectOutputStream

 b. char
 ==> 입력 최상위 클래스 : Reader
     - FileReader
     - InputStreamReader
     - BufferedReader

     출력 최상위 클래스 : Writer
     - FileWriter
     - PrintWriter

 

2. 표준 입출력

1) System.in     표준 입력으로 데이터를 읽어올때 사용

2) System.out   표준 출력으로 모니터로 데이터를 출력 할때 사용

3) System.err    표준 에러로서 모니터에 에러정보를 출력할때 사용한다.

 

<예제 문장 1> 문자 한개를 입력받아 출력

import java.io.IOException;
import java.io.InputStream;

 

public class StandardOutputTest {
 public static void main(String[] args) {
  
  try{
  System.out.print("문자를 입력하세요 : ");
  InputStream a = System.in;
  int n = a.read(); //1byte 입력
  System.out.print("입력 값 : "+(char)n);
  a.close(); // 사용후에는 반드시 close() 사용하여 자원을 해제
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

<출력>

문자를 입력하세요 : abc
입력 값 : a

 

문자를 여러개 입력해도 하나만 입력 받아진다.

 

<예제문장 2>

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

 

public class StandardOutputTest {
 public static void main(String[] args) {

  try {

   System.out.print("문자를 입력하세요 : ");
   InputStream a = System.in;
   InputStreamReader b = new InputStreamReader(a);
   BufferedReader c = new BufferedReader(b);
   String str = c.readLine();

   System.out.print("입력 값 : " + str);

   c.close(); // 사용후에는 반드시 close() 사용하여 자원을 해제

  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

<출력>

문자를 입력하세요 : abc 김상진
입력 값 : abc 김상진

 

입력데이터를 한 라인씩 처리하는 BufferedReader 클래스의 readLine() 메소드를 사용한 방식이다.

또한 String 으로 처리하기 때문에  예제1번처럼 char로 강제형변환을 하지 않아도 된다.

 

=====수업 내용======

 

1. 자바 I/O
 가. 용어 정리
      입력(input)  출력(output)
      (입력스트림)  (출력스트림)
 소스 -------->  자바프로그램 --------> 대상(sink)
 (source)
: 키보드    : 모니터
(표준입력 : standard input)  (표준출력 : standard out)
: 파일     : 파일
: 메모리    : 메모리
: 네트워크    : 네트워크

 나. 스트림의 데이터 종류?
   => 자바 프로그램에서 I/O 가능한 데이터 종류
 a. byte
 : 바이너리(binary) 데이터 처리시 사용.
   예> 이미지, 문자데이터 포함
 b. char
 : 문자 데이터 처리시 사용.
 다. 자바 I/O 클래스 제공.
 
 a. byte
 ==> 입력 최상위 클래스 : InputStream
     - FileInputStream (파일읽기)
     - ObjectInputStream
     출력 최상위 클래스 : OutputStream
     - FileOutputStream (파일출력)
     - ObjectOutputStream

 b. char
 ==> 입력 최상위 클래스 : Reader
     - FileReader
     - InputStreamReader
     - BufferedReader

     출력 최상위 클래스 : Writer
     - FileWriter
     - PrintWriter

  
2. 표준 입출력 ( Standard input / output)
==> 키보드로 입력
==> System 클래스로 처리한다.

가. 표준입력
InputStream is = System.in;
xxx.println(값);
==> System.out.println(값):

나. 표준출력
PrintStream xxx = System.out;

다. 표준에러
System.err

==> StandardInputTest2 실습의 특징은
- 1byte만 읽는다.
- 한글 못 읽는다.
- char로 형 변환시커야 된다.
- 반복처리
- \n과 \r을 필터링하는 작업 추가.
: 결론은 너무 불편하다.
이유는 InputSteam 클래스만 사용했기 때문이다.
다른 유용한 클래스를 같이 사용한다. 

StandardInputTest3 실습의 특징
- 지정된 byte 배열 크기만큼만 저장
- 한글처리 불가
- char로 형 변환 시켜야한다.
- 반복처리

3. try-with-resources 문
==> 자바7부터 사용가능
==> 외부 자원 사용시 자동 close시키는 방법이다.

ex)try(외부자원 선언;외부자원선언2;외부자원선언3){

}catch( ){
}
-----------------------------------
try{
 자원;
}catch(){
}finally{
//명시적으로 자원을  close 해야된다.
}

4. 파일 읽기

==> 어떤 파일이냐? ( 문자데이터, 이미지 )
문자 : FileReader
이미지 : FileInputStream

5. 파일 관련 클래스
==> java.io.file 클래스
==> 전반적인 파일의 정보를 관리.
ex) 경로, 파일명, 디렉토리 정보, 파일크기, 디렉토리 생성, 디렉토리 조회, 파일삭제등....
(파일생성 x)
==> 메타데이터 ( 정보의 정보 )를 관리.

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,