입출력 : IO( Input Output ) Stream
  • JVM외부에 존재하는 데이터를 처리하기 위해 연결하는 클래스들
  • java.io 패키지에서 클래스들 제공


입력의 근원

출력의목적지
1.시스템
( 키보드 )
JVM
1.시스템
( 모니터 )
2.파일
( 하드디스크 )
2.파일
( 하드디스크 )
3.network
3.network
InputStream
입력스트림

OutputStream
출력스트림

  • Java의 IO는 단반향 IO이다 ( 읽기와 쓰기가 동시에 될수 없다. )
  • 8bit Stream(byte기반)과 16bit Stream(String 기반)으로구분된다.

8bit Stream
16bitStream
바이트기반
문자열기반
속도빠름
속도느림
데이터의 양은 적다.
데이터의 양이 많다.
모든 데이터를 읽고 쓸수있다.
문자열데이터만 읽고 쓸 수있다.

8 Bit Stream
16Bit Stream
입력
InputStream
출력
OutputStream
입력
Reader
출력
Writer
ObjectInputStream
( 객체를 입력 )
ObjectOutputStream
(객체를 출력 )
FileReader
( 문자열파일입력 )
FileWriter
( 문자열파일출력 )
FileInputStream
( 파일을 입력 )
FileOutputStream
(파일을 출력 )
BufferedReader
( 문자열파일입력,속도개선 )
BufferedWriter
( 문자열파일출력,속도개선 )
DataInputStream
( 데이터를 입력 )
DataOutputStream
( 데이터를 출력 )




1.Stream의 결합
 Stream은 결합 가능하다 ( 8bit + 8bit ,16bit + 16bit , 8bit + 16bit )
1)8bit+16bit
  InputStreamReader 를 사용한다.
2)16bit+16bit
   BufferedReader 의 readLing() 메소드를 사용한다.



package day0419;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
 *  시스템 입력 ( 키보드 입력 : System.in )
 * @author owner
 */
public class UseKeyboardInput {
    public UseKeyboardInput() {
        System.out.println("아무키나 누르고 엔터");
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        try {
            //8bit stream 과 16bit stream을 연결하여 줄단위읽기
            
            
//          int key;
//          while(true) {
//              //key = System.in.read(); //읽어들인 문자를 조합할수 없기 때문에 한글은 사용할 수 없다.
//              key = br.read();
//               if(key==13) {
//                   break;
//               }
//              System.out.println("읽어 들인 값: "+ (char)key+","+key);
            }//end while
        }catch(IOException e) {
            e.printStackTrace();
        }
    }//UseKeyboardInput
    public static void main(String[] args) {
        new UseKeyboardInput();
    }//main
}//UseKeyboardInputS








2.파일 입력
1)FileInputStream : 8bit
 -파일의 내용을 출력할 필요가없는 파일을 읽어들일때사용(이미지,동영상복사)
2)FileReader : 16bit
 -파일을 읽어 뿌려야할때
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
혹은
BufferedReader br = new BufferedReader(new FileReader(file));
사용

3.Stream의 사용이 끝났다면 Stream 을 반드시 끊어야 한다.
close()메소드 사용


4.File
java.io 패키지 존재
파일정보얻기,directory생성, 파일삭제
4.1) 생성
File f = new File(" 파일의 경로" );
4.2) method
절대경로 얻기 :f.getAbsolutePaht():String;
폴더명 : f.getParent():String;
파일명 : f.getName():String;
파일인지 여부 : f.isFile():boolean;
폴더인지 여부 : f.isDirectory(): boolean;
읽기가능한지 여부 :  f.canRead();boolean;
쓰기가능한지 여부 :  f.canWhrite();boolean;
실행가능한지 여부 :  f.canExecute():boolean;
숨긴파일인지 여부 : f.isHidden();
폴더내 파일의 목록 : f.listFiles() : File[];
파일이름 변경 : f.renameTo(File ):boolean;
폴더를 생성 : f.mkdir() : boolean;  // root 에는 폴더가 안만들어짐
폴더를 생성 : f.mkdirs() : boolean; // root 에도 폴더가 생성됨
파일지우기 : f.delete() : boolean;
파일이 마지막으로 수정된 날짜 : f.lastModified():long
파일존재여부 : f.exists():boolean
파일길이 : f.length():int

5.출력스트림
  •  JVM내의 데이터를 JVM외부로 내보내는 것 File관련 스트림 
  • 파일과 연결 : 목적지에 파일이 없으면 파일 생성, 파일이 있으면 덮어쓴다.
  • flush() 메소드를 사용하여 목적지에 분출하고 close()메소드로 연결을 끊는다.


종류
차이점
공통점
FileOutputStream
모든 파일을 생성
객체가 생성되자마자 폴더는 생성하지 못한다.
FileWriter
문자열 파일만 생성

사용법)
BufferedWriter bw = new BufferedWriter( new FileWriter(file));
bw.write("문자열");스트림에 기록
bw.flush() ; 목적지로 분출!


6.파일복사
  • 8Bit 사용하면 모든 파일을 복사 할 수 있다.
  • 16 bit 사용하면 text파일만 복사가능

7.객체쓰기
  •  instance(생성된 객체)를 JVM외부로 내보내거나 JVM외부에 존재하는 instance 읽어들이는 일을 하는 stream
  • 객체(instance)는 Stream을 타고 외부로 나 갈수 없다. (중요정보를 안전하게 보호하기 위해서 직렬화 X)
  • 기본형 데이터형은 Stream을 타고 외부로 나갈 수 있다. ( 직렬화 O)
  • transient : 객체 직렬화방지키워드 ( 직렬화 되어 객체가 밖으로 나가더라도 transient가 붙어있으면 그 값은 외부로 나가지 못한다. )
  • 객체를 JVM외부로 내보낼때 Serialiable interface를 구하면된다.(직렬화)
  • ObjectInputStream ( UnMarshall Stream : 쪼개진 객체가 다시 합쳐지는 것), ObjectOutputStream( Marshall Stream : 객체를 직렬화하여 쪼개고 출력하는 것)
  • 직렬화된 객체를 검증하기 위해 Serial Version UID사용

ObjectOutputStream oos = new ObjectOutStream(new FileOutputStream(파일명));
oos.writeObject(객체);
oos.flush();

ObjectInputStream ois = new ObjectInputStream(new FileInputStream(파일명));
ois.readObject(); < Class NotFoundException 발생할 우려가 있음






















블로그 이미지

이든Kim

,