-> 블로그 이전

[명품 Java] 8장 연습문제 (입출력 스트림과 파일 입출력)

2021. 12. 17. 19:20Solution`/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();