명품 JAVA Programming 제8장 요약/예제 open challenge/실습문제

이종훈·2021년 12월 14일

명품 JAVA Programming

목록 보기
4/7

스트림Permalink
스트림 입출력Permalink
버퍼를 가지고 단방향으로 순차적으로 이루어지는 입출력
자바의 입출력 스트림Permalink
응용프로그램과 입출력 장치를 연결해 주는 SW 모듈
입력 스트림 : 입력 장치로부터 자바 프로그램으로 데이터 전달
출력 스트림 : 출력 장치로 데이터 출력
자바의 입출력 스트림 특징Permalink
바이트 스트림과 문자 스트림Permalink
바이트 스트림
입출력되는 데이터를 단순 바이트로 처리
그 예로 바이너리 파일을 읽는 입력 스트림이 있음
문자 스트림
문자만 입출력하는 스트림으로, 바이너리 데이터는 처리 못함
그 예로 텍스트 파일을 읽는 입력 스트림이 있음
스트림 분류Permalink
text

스트림의 연결성Permalink
스트림 간 연결 가능
표준 입력 스트림에 InputStreamReader 스트림을 연결할 수 있음
간단한 예제
InputStreamReader rd = new InputStreamReader(System.in);
int c = rd.read(); // 키보드에서 입력하는 문자 읽음
문자 스트림Permalink
유니 코드(2바이트) 문자를 입출력하는 스트림
문자로 표현되지 않는 데이터는 다루지 못함
이미지, 동영상 등과 같이 바이너리 데이터는 입출력 불가
문자 스트림을 다루는 클래스Permalink
Reader / Writer
InputStreamReader / OutputStreamWriter
FileReader / FileWriter
텍스트 파일에 문자 데이터 입출력하는 스트림
FileReader(비버퍼, 문자) 사용 예제Permalink
FileReader fin = new FileReader("c:\test.txt"); // C:\test.txt 파일의 입력 바이트 스트림 객체 fin 연결
int c;
while((c=fin.read()) != -1) { // EOF 반복, 바이트를 c에 저장
System.out.println((char)c); // 반복될 때마다 c에 저장된 바이트를 char형으로 형 변환 후 출력
}
fin.close(); // 스트림 닫음
FileInputStream(비버퍼, 바이트)와 InputStreamReader(비버퍼, 문자) 사용 예제Permalink
한글 파일도 정상적으로 읽을 수 있음, (단 MS949를 사용해야 함)
FileInputStream fin = new FileInputStream("c:\Temp\hangul.txt"); // 파일 읽어서 fin 객체 저장
InputStreamReader in = new InputStreamReader(fin, "MS949"); // 저장된 fin 객체의 문자 집합을 "MS949"로 지정 후 in 객체 저장
int c;
while((c=in.read()) != -1) { // EOF 반복, 문자를 c에 저장
System.out.println((char)c); // 반복될 때마다 c 출력
}
in.close();
fin.close();
text

FileWriter 사용 예제Permalink
파일 쓰기Permalink
문자 단위 쓰기
FileWriter fout = new FileWriter("c:\Temp\test.txt"); // 문자 출력 스트림 생성
fout.write('A') // 문자 'A' 출력(쓰기)
fout.close();
블록 단위 쓰기
FileWriter fout = new FileWriter("c:\Temp\test.txt"); // 문자 출력 스트림 생성
char [] buf = new char[1024];
fout.write(buf, 0, buf.length) // buf[] 배열의 처음부터 배열 크기만큼 쓰기
fout.close();
키보드 입력 받아 파일로 쓰기
fout = new FileWriter("c:\Temp\test.txt"); // 출력 스트림 생성
while(true) {
String line = scanner.nextLine(); // [Enter]를 치기 전까지의 작성한 문자열을 모두 리턴
if(line.length() == 0) // 작성한 문자열이 없다면 종료
break;
fout.write(line, 0, line.length()); // 반복할 때마다 line의 0번째 인덱스부터 길이만큼 파일에 쓰기
fout.write("\r\n", 0, 2); // 줄 넘김
}
fout.close(); // 출력 스트림 종료
scanner.close(); // 입력 종료
바이트 스트림Permalink
바이트 단위의 바이너리 값을 읽고 쓰는 스트림
바이트 스트림 클래스Permalink
InputStream / OutputStream
추상 클래스
바이트 스트림을 다루는 모든 클래스의 부모 클래스(슈퍼 클래스)
FileInputStream / FileOutputStream
파일로부터 바이트 단위로 읽거나 저장하는 클래스
바이너리 파일의 입출력 용도
DataInputStream / DataOutputStream
자바의 기본 데이터 타입의 값(변수)를 바이너리 값 그대로 입출력
문자열도 바이너리 형태로 입출력
FileOutputStream 사용 예제Permalink
FileOutputStream fout = new FileOutputStream("c:\Temp\test.out"); fout 출력 스트림 객체 생성
byte b[ ] = {7,51,3,4,-1,24}; // 임의의 바이너리 값을 배열 b에 저장
for(int i=0; i<b.length; i++) // b의 배열 길이만큼 반복
fout.write(b[i]); // b의 요소들을 쓰기
fout.close(); // 출력 스트림 객체 닫기
FileInputStream 사용 예제Permalink
byte b[] = new byte[6]; // 바이너리 값 저장할 배열 생성
FileInputStream fin = new FileInputStream("c:\Temp\test.out"); // 입력 스트림 객체 생성
int n=0;
int c;
while ((c = fin.read()) != -1) { // EOF 반복
b[n] = (byte)c; // 바이너리 값 저장
n++;
}
for (int i=0; i<b.length; i++) { // 배열의 길이만큼 반복
System.out.println(b[i] + " "); // b 요소 출력
}
fin.close(); // 입력 스트림 객체 닫기
버퍼 스트림Permalink
버퍼를 가진 스트림
입출력 데이터를 ‘일시적’으로 저장하는 버퍼를 이용하여 입출력 효율 개선
버퍼 입출력의 목적Permalink
입출력 시 운영체제의 API 호출 횟수를 줄여 입출력 성능 개선
출력 시 여러 번 출력되는 데이터를 버퍼에 모아두고 한 번에 장치로 출력
버퍼 스트림의 종류Permalink
바이트 버퍼 스트림Permalink
바이트 단위의 바이너리 데이터를 처리하는 버퍼 스트림
BufferedInputStream, BufferedOutputStream
문자 버퍼 스트림Permalink
유니코드의 문자 데이터만 처리하는 버퍼 스트림
BufferedReader, BufferedWriter
BufferedOutputStream 사용 예제Permalink
BufferedOutputStream bout = new BufferedOutputStream(System.out, 20); // 20바이트 크기의 버퍼, System.out 표준 스트림에 출력
FileReader fin = new FileReader("c:\windows\system.ini"); // 입력 스트림 생성
int c;
while((c=fin.read()) != -1) { // EOF 반복
bout.write((char)c); // 반복할 때마다 버퍼에 저장
}
fin.close(); // 입력 스트림 닫기
bout.close(); // 출력 버퍼 스트림 닫기
File 클래스Permalink
파일의 경로명을 다루는 클래스
java.io 패키지의 클래스
파일과 디렉터리 경로명의 추상적 표현
파일 관리 기능
파일 이름 변경, 삭제, 디렉터리 생성, 크기 등 파일 관리
File 객체는 파일 읽고 쓰기 기능이 없음
File 클래스 사용 예제Permalink
File f = new File("c:\windows\system.ini");
String filename = f.getName(); // "system.ini"
String path = f.getPath(); // "c:\windows\system.ini"
String parent = f.getParent(); // "c:\windows"
if(f.isFile()) // 파일인 경우
System.out.println(f.getPath() + "는 파일입니다.");
else if(f.isDirectory()) // 디렉터리인 경우
System.out.println(f.getPath() + "는 디렉터리입니다.");

예제8-1

예제8-2

예제8-3

예제8-4

예제8-5

예제8-6

예제8-7

예제8-8

예제8-9

open challenge 행맨(hangman)게임 만들기

profile
빅데이터 분석 및 UI구현

0개의 댓글