[명품 Java] 8장 연습문제 (입출력 스트림과 파일 입출력)
2021. 12. 17. 19:20ㆍSolution`/Java
[8장 1번]
스트림에 대한 설명으로 틀린 것은?
1. 입출력이 동시에 되는 스트림은 없다
2. 스트림은 다른 스트림과 연결될 수 없다
3. 스트림은 먼저 들어온 데이터를 먼저 내보내는 방식이다
4. 스트림은 바이트를 다루는 스트림과 문자만 다루는 스트림으로 나누어진다
[8장 2번]
다음 응용에서 어떤 입출력 스트림 클래스를 사용하여야 하는가?
(1) 음악 파일 연주
- 바이트 스트림
(2) ppt 파일 복사
- 바이트 스트림
(3) 영어와 한글이 기록된 사전 읽기
- 문자 스트림 / 바이트 스트림
(4) 선수 이름과 점수를 문자열로 저장
- 문자 스트림 / 바이트 스트림
[8장 3번]
이미지 파일을 읽으려고 한다. 가장 적합한 클래스는?
1. InputStreamReader
2. File
3. FileReader
4. FileInputStream
[8장 4번]
다음은 파일을 읽기 위해 스트림을 생성하는 코드이다. 이 코드가 실행될 때 발생할 수 있는 예외가 어떤 것이 있는지 설명하고, try-catch 블록으로 감싸는 코드를 작성하라
FileInputStream fin = new FileInputStream("song.mp3")
- 파일의 경로명이 틀린 경우 → FileNotFoundException 예외 발생
try{
FileInputStream fin = new FileInputStream("song.mp3")
}
catch(FileNotFoundException e){
System.out.println("파일을 찾을 수 없습니다.");
}
catch(IOException e){
System.out.println("입출력 오류 발생");
}
>> 결국 최상위 예외는 IOException이므로 IOException 하나만 작성해줘도 된다
[8장 5번]
파일의 크기를 알려고 할 때 필요한 클래스는?
1. File
2. FileSize
3. System
4. FileInputStream
[8장 6번]
File 클래스의 직접적인 기능이 아닌 것은?
1. 파일 읽고 쓰기
2. 파일 이름 변경
3. 새 디렉터리 만들기
4. 파일 삭제
[8장 7번]
다음 코드에 대해 물음에 답하라
File file = new File("c:\\windows\\system.ini");
(1) file.isFile()의 리턴 값은?
- true
(2) file.getParent()의 리턴 값은?
- c:\\windows
(3) file.getPath()의 리턴 값은?
- c:\\windows\\system.ini
(4) file.getName()의 리턴 값은?
- system.ini
(5) 아래 빈칸을 채워 문제의 코드와 동일한 코드를 구성하라.
File file = new File(___________________, "system.ini");
"c:\\windows"
[8장 8번]
문자 집합에 대한 설명으로 틀린 것은?
1. 문자들의 인코딩 정보로 구성된 문자 인코딩 세트를 뜻한다
2. 텍스트 파일 읽기 시 문자 집합을 알려주지 않으면 제대로 읽지 못하는 경우가 발생한다
3. 바이트 스트림 입출력 시 문자 집합을 고려하여 입출력해야 한다
4. 윈도우에서 작성된 텍스트 파일은 기본적으로 "MS949" 문자 집합으로 인코딩된다
- 3번, 바이트 스트림은 바이너리 데이터로 입출력 하기 때문에 문자 집합은 고려할 필요가 없다
[8장 9번]
c:\temp\test.txt 파일을 읽어 화면에 출력하는 코드이다. 빈칸을 완성하라
FileInputStream fin = null;
try{
fin = new FileInputStream(________________________);
int c;
while(true){
c = fin.read();
if(________________________) break;
System.out.print((char)c);
}
________________________;
} catch(________________________){
System.out.println("파일을 찾을 수 없습니다.");
} catch(IOException e){
System.out.println("입출력 오류가 발생했습니다.");
}
>> 풀이
FileInputStream fin = null;
try{
fin = new FileInputStream("c:\\temp\\test.txt");
int c;
while(true){
c = fin.read(); // 파일에서 한 바이트 읽기
if(c == -1) break; // 파일 끝까지 읽었음
System.out.print((char)c);
}
fin.close(); // 파일 입력 스트림 닫기
} catch(FileNotFoundException e){
System.out.println("파일을 찾을 수 없습니다.");
} catch(IOException e){
System.out.println("입출력 오류가 발생했습니다.");
}
[8장 10번]
다음은 50 바이트 크기의 버퍼를 사용하여 C:\temp\sample.txt를 읽어 화면에 출력하는 소스 코드의 일부이다. 빈칸을 채워라
BufferedOutputStream bout = ________________________;
File f = new File(________________________);
FileReader fin = new FileReader(f);
int c;
while(________________________){
________________________;
}
fin.close();
bout.close();
>> 풀이
BufferedOutputStream bout = new BufferedOutputStream(System.out, 50);
File f = new File("c:\\temp\\sample.txt");
FileReader fin = new FileReader(f);
int c;
while((c=fin.read()) != -1){
bout.write(c);
}
fin.close();
bout.close();