본문 바로가기
국비학원

[국비지원] KH 정보교육원 20일차

by 도전하는 개발자 2022. 4. 20.

Day 020

 오늘은 어제에 이어서 네트워킹에서 파일 입출력을 배우고 보조스트림 개념도 배웠다. 그 밖에 과제 해결을 위해 Thread.sleep() 메서드와 Date 객체 등등을 배웠다. 오늘의 과제는파일을 지정된 폴더에, 시간에 맞추어 주기적으로 복사하는 것이었는데, 혼자했으면 막막했을텐데 등원해서 조원님의 도움을 받아서 쉽게 완성할 수 있었다. 대면수업의 장점이 빛을 발한 오늘이었다 ㅎㅎ 네트워킹도 절반 넘게 진행된거 같다. 금요일에 테스트를 보니 사실상 이틀이 남은셈인데, 아직은 완벽하게 감을 잡았다는 느낌이 오지 않는다. 내일 수업 전에 책을 한번 더 봐야겠다.

 

과제 해결을 위한 추가학습 - Date 객체
과제 해결을 위한 추가학습 - Thread.sleep()

 

 

File 클래스를 이요한 파일 및 디렉토리 정보 출력

 

FileInputStream
파일로부터 바이트 단위로 읽어 들일 때 사용
그림, 오디오, 비디오, 텍스트 파일 등 모든 종류의 파일을 읽을 수 있음
InputStream 하위 클래스 - 사용 방법이 InputStream과 동일

객체 생성 방법
FileInputStream 객체가 생성될 때 파일과 직접 연결
만약 파일이 존재하지 않으면 FileNotFoundException 발생
try-catch문으로 예외 처리
FileInputStream fis = new FileInputStream("C:/Temp/TTT.java");

 

FileInputStream - 텍스트 파일을 읽고 출력

 

FileOutputStream
파일에 바이트 단위로 데이터를 저장할 때 사용
그림, 오디오, 비디오, 텍스트 등 모든 종류의 데이터를 파일로 저장
OutputStream 하위 클래스 - 사용 방법이 OutputStream과 동일

객체 생성 방법
파일이 이미 존재할 경우, 데이터를 출력하게 되면 파일을 덮어쓰는 단점
따라서 기존 파일 내용 끝에 데이터를 추가할 경우 두번째 매개변수로 true를 주어야한다
FileOutputStream fos = new FileOutputStream ("C:/Temp/data.txt", true);

 

FileOutputStream - 파일 복사

 

FileReader
텍스트 파일로부터 데이터를 읽어 들일 때 사용
문자 단위로 읽음 
텍스트가 아닌 그림, 오디오, 비디오 등의  파일은 읽을 수 없음
Reader 하위 클래스 - 사용 방법 Reader와 동일

객체 생성 방법
(1) FileReader fr = new FileReader("C:/Temp/file.txt");
(2) File file = new File("C:/Temp/file.txt");
    FileReader fr = new FileReader(file)

FileReader 객체가 생성될 때 파일과 직접 연결
만약 파일이 존재하지 않으면 FileNotFoundException 발생
try-catch문으로 예외 처리

 

FileReader - 텍스트 파일 읽기

 

FileWriter
텍스트 파일에 문자 데이터를 저장할 때 사용
텍스트가 아닌 그림, 오디오, 비디오 등의 데이터를 파일로 저장 불가
Writer 하위 클래스 - 사용 방법이 Writer와 동일

객체 생성 방법
File file = new File("C:/Temp/ttt.java", true);
FileWriter fw = new FileWriter(file, true);
파일이 이미 존재할 경우, 데이터를 출력하게 되면 파일을 덮어쓰게 됨
기존 파일 내용 끝에 데이터를 추가할 경우 위와 같이 true를 붙여준다

 

FileWriter - 문자열을 파일에 저장

보조 스트림
다른 스트림과 연결 되어 여러 가지 편리한 기능을 제공해주는 스트림
문자 변환, 입출력 성능 향상, 기본 데이터 타입 입출력, 객체 입출력 등의 기능을 제공
입력스트림-보조스트림-프로그램-보조스트림-출력스트림

보조 스트림 생성
보조스트림 변수 = new 보조스트림 (연결스트림)

보조스트림 체인 : 보조스트림끼리 연결도 가능
입력스트림-보조스트림-보조스트림-프로그램-보조스트림-보조스트림-출력스트림

문자 변환 보조 스트림
소스 스트림이 바이트 기반 스트림이지만 데이터가 문자일 경우 사용
Reader와 Writer는 문자 단위로 입출력 - 바이트 기반 스트림보다 편리
문자셋의 종류를 지정할 수 있기 때문에 다양한 문자 입출력 가능

 

InputStreamReader
바이트 -> InputStream -> InputStreamReader -> 문자 -> 프로그램

Reader reader = new InputStreamReader(바이트입력스트림);

OutputStreamWriter
프로그램 -> 문자 -> OutputStreamWriter -> OutputStream -> 바이트

Writer writer = new OutputStreamWriter(바이트입력스트림);

 

InputStreamReader - 콘솔에서 한글 입력받기

 

OutputStreamWriter - 파일로 출력하기

성능 향상 보조 스트림
입출력 성능에 영향을 미치는 입출력 소스
하드 디스크, 느린 네트워크 ...

버퍼를 이용한 해결 
입출력 소스와 직접 작업하지 않고 버퍼(buffer)와 작업 - 실행 성능 향상
프로그램 ---데이터고속전송---> 메모리버퍼 ---버퍼내용모두전송---> 하드디스크
프로그램은 쓰기 속도 향상
버퍼 차게한 뒤 데이터를 한꺼번에 하드 디스크로 보내 출력 횟수를 줄여줌

BufferedInputStream, BufferedReader
프로그램 <---고속읽기--- 보조스트림 <---미리버퍼에채워둠--- 입력소스
BufferedInputStream bis = new BufferedInputStream(바이트입력스트림);
BufferedReader br = new BufferedReader(문자입력스트림)

BufferedOutputStream, BufferedWriter
프로그램 ---고속전송---> 보조스트림 ---버퍼내용모두전송---> 목적지
BufferedOutputStream bos = new BufferedOutputStream(바이트출력스트림);
BufferedWriter bw = new BufferedWriter(문자출력스트림)

 

BufferedInputStream - 버퍼를 사용하면 엄청나게 빠르다!

 

BufferedReader - 버퍼를 사용하면 엄청 빠르다!

 

 

기본 타입 입출력 보조 스트림
들어오는건 바이트타입인데, 프로그램에서는 기본데이터 타입(int double)을 쓸 때가 있다
바이트->InputStream->DataInputStream->프로그램->DataOutputStream->OutputStream -> 바이트

 

DataInputStream dis = new DataInputStream(바이트입력스트림);

DataOutputStream dos = new DataOutputStream(바이트출력스트림);

 

DataInputStream, DataOutputStream - 기본데이터 타입 입출력

 

프린터 보조 스트림
프로그램 -> 기본타입/문자열 -> PrintStream/PrintWriter -> OutputStream/Writer -> 문자 코드로 출력

 

PrintStream ps = new PrintStream(바이트출력스트림);
PrintWriter pw = new PrintWriter(문자출력스트림);

 

프린터 보조 스트림 - 라인 단위로 출력하기