👨🏻‍💻

[JAVA] 입출력

과목
JAVA
태그
InputStream
Reader
OutputStream
Write
StudyDate
2021/05/05

1. File 클래스

1.
파일 시스템의 파일을 표햔하는 클래스
2.
파일크기, 파일속성, 파일이름 등의 정보와 파일 생성 및 삭제 기능을 제공
3.
File 인스턴스 생성
File file = new File("file path"); File file = new File("C:/data/fileTest.txt");
Java
복사

2. 입출력(IO)란?

Input과 Output의 약자로 컴퓨터 내부 또는 외부장치와 프로그램간의 데이터를 주고 받는 것, 장치와 입출력을 위해서는 하드웨어 장치에 직접 접근이 필요한데 다양한 매체에 존재하는 데이터들을 사용하기 위해 입출력 데이터를 처리 할 공통적인 방법으로 스트림 을 이용
스트림은 단방향! 즉 입출력을 위해서는 스트림이 2개 필요하다 (입력스트림, 출력스트림)

그러면 스트림이란??

입출력 장치에서 데이터를 읽고 쓰기 위해서 자바에서 제공하는 클래스
모든 스트림은 단방향이며 각각의 장치마다 연결할 수 있는 스트림이 존재
하나의 스트림으로 입출력을 동시에 수행할 수 없으므로 동시에 수행하려면 2개의 스트림이 필요
스트림의 종류
1.
기반스트림 : 스트림 자체만으로 사용할 수 있는것, 메인스트림이라고도 불림
2.
보조스트림 : 단독으로 사용불가하며 다른 스트림과 섞어사용

3. InputStream

바이트 기반 입력 스트림의 최싱위 클래스로 추상 클래스
바이트 기반 스트림이란 ? → 데이터를 읽어들일때 1바이트씩 끊어읽는스트림(한글은 한글자에3byte이어서 한글을 불러올때 깨짐) 주로 동영상, 사진 파일을 읽어들일때 사용(이런걸 바이너리데이터라고한다, 바이트기반 스트림은 바이너리 데이터를 읽는게목적에 스트림)

3-1 FileInputStream

파일로부터 바이트 단위로 읽을 때 사용하며, 그림 , 오디오, 비디오, 텍스트 파일 등 모든 종류의 파일 읽기 가능
InputStream의 하위 클래스로 InputStream의 메소드를 그대로 사용가능
FileInputStream 인스턴스 생성
FileInputStream객체가 생성 될 때 파일과 직접 연결
만약 파일이 존재하지않으면 FileNotFoundException이 발생하므로 예외처리 필수이다!!
FileInputStream fis = new FileInputStream("C:/data/test.txt");
Java
복사

4. OutputStream

바이트 기반 출력 스트림의 최상위 클래스로 추상 클래스

4-1 FileOutPutStream

파일로 부터 바이트 단위로 읽을 때 사용하며 그림, 오디오, 비디오, 텍스트 파일 등 모든 종류의 파일 읽기 가능
OutputStream의 하위 클래스로 OutputStream의 메소드를 그대로 사용 가능
FileOutputStream 인스턴스 생성
FileOutputStream 객체가 생성될 때 파일과 직접 연결
만약 파일이 존재하지 않으면 자동으로 생성하지만 이미 파일이 존재하는 경우 파일을 덮어쓰는 단점이 있음
FileOutputStream fis = new FileOutputStream("C:/data/test.txt");
Java
복사
만일 기존 파일에 이어서 계속 추가 작성하고 싶다면 아래와 같이 작성
FileOutputStream fis = new FileOutputStream("C:/data/test.txt", true);
Java
복사

5. Reader

문자 기반 입력 스트림의 최상위 클래스로 추상 클래스
텍스트를 읽어오는 방식으로 많이쓰인다

5-1 FileReader

텍스트 파일로부터 Byte단위가 아닌 character 단위로 읽어 들임 (2바이트이던 3바이트이던 글자 단위로 읽어오기때문에 한글을 정상적으로 읽어올 수 있음)
FileInputStream과 사용하는 방법이 거의 동일
Reader의 하위클래스로 Reader의 메소드를 그대로 사용가능
FileReader 인스턴스 생성
FileReader객체가 생성될 때 파일과 직접 연결 됨
만약 파일이 존재하지 않으면 FileNotFoundException이 발생하므로 예외처리 필수!!
FileReader fr = new FileReader("C:/data/test.txt"); FileReader fr = new FileReader(new File("C:/data/test.txt"));
Java
복사

6. Writer

문자 기반 입력 스트림의 최상위 클래스로 추상 클래스

6-1 FileWriter

/* 입출력 스트림 개요 */ /* 우리는 프로그래밍을 할 때 많은 종류의 데이터를 다루어야 한다. * 하지만 데이터는 프로그램 내부에도 있을 수 있지만, 프로그램 외부의 데이터를 가져와서 사용해야 할 수 도있다. * 또한 프로그램에서 생성한 데이터를 외부로 출력 할 수 도 있다. * * 외부 데이터란 프로그램 외부에 존재하는 모든 데이터를 의미한다. * 외부데이터는 하드디스크상 파일이 될 수 도있고, 네트워크 상에 존재하는 자원이 될 수 도 있다. * * 외부 데이터를 대상으로 작업을 할 떄 가장 먼저 해야할일은 자바프로그램과 데이터를 연결하는 것이다. * 프로그램과 외부데이터가 연결되는 길을 Stream(스트림) 이라고 한다. * 스트림은 단방향이기 때문에 데이터를 읽어오기위한 길을 입력 스트림, * 데이터를 출력하기 위한 길은 출력 스트림이라고 부른다. * * 입출력과 관련된 API는 java.io패키지에서 제공한다. * API문서에서 목록을 확인하면 대부분 InputStream/OutputStream, Reader/Writer로 끝난다. * 이러한 클래스 모두 외부데이터를 읽어오는 기능을 가진 스트림이다. * * 그 중 InputStream과 Reader는 데이터를 읽어오는 입력스트림이고 * OutputStream, Writer는 데이터를 내보내는 출력스트림이다. * * 또한 InputStream과 OutputStream은 데이터를 1바이트단위로 입출력하고 * Reader와 Writer 계열은 글자(2바이트 혹은 3바이트) 단위로 작업을 한다. * * 자바 프로그램과 연결되는 외부데이터타입이 무엇인지 클래스의 이름을 보고 유추가 가능하다. * inputStream/OutputStream/Reader/Writer 를 뺴고 남은 단어가 외부데이터 타입이다. * * 예) FileInputStream은 InputStream을 제거하고 남은 단어가 File이므로 외부데이터가 File인걸 알 수 있다. * * */ // File InputStream FileInputStream fin = null; // FileInputStream은 대상파일의 정보가 있어야지 인스턴스를 생성할 수 있고 빈생성자로는 인스턴스를 생성하지 못한다. try { fin = new FileInputStream("src/com/song/practice/io/stream/testInputStream.txt"); int value; // 대입된 value값이 -1이 될때까지 -1은 데이터를 끝날때 음수-1을 반환한다.(flag신호) while((value = fin.read()) != -1) { System.out.println("value : " + (char)value ); } } catch (FileNotFoundException e) { System.out.println("파일을 못찾았으요"); e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
Java
복사