코딩항해기

[과제/JAVA] 멘토시리즈 : 자바 - 19 파일 입출력 응용문제 본문

problem solving/문제 풀기

[과제/JAVA] 멘토시리즈 : 자바 - 19 파일 입출력 응용문제

miniBcake 2024. 7. 29. 15:15

 

 

 

 

 

[JAVA] 파일 입출력

자바 입출력 스트림 특징자바에서는 입출력이 동시에 진행되는 것이 아니라 독립적으로 한 가지 기능만 동작하기 때문에 데이터를 교환하기 위해서는 입력 스트림과 출력 스트림이 따로 필요

minibcake.tistory.com

 

 

 

문제 1. 다음 중 스트림의 관한 설명으로 틀린 것은 무엇일까요?

3번 하나의 스트림으로 입력 출력을 제어할 수 없다. 하나의 스트림은 하나의 기능만 하며 입력과 출력 기능은 구분되어있다.

 

 

 

문제 2. 이미지 파일을 복사하려고 합니다. 다음 중 가장 적합한 스트림은 무엇일까요?

3번 이미지 파일은 byte 처리할 수 있는 스트림으로 진행해야하기 때문이다.

 

 

 

문제 3. 다음은 보조스트림에 대한 설명입니다. 문장이 맞으면 O표, 틀리면 X표하세요.

  • 보조 스트림은 다른 보조스트림과 중첩하여 사용할 수 있습니다. O
  • 보조 스트림은 자체적으로 입출력을 수행할 수 있습니다. X
  • 성능향상 기반 보조 스트림 중에서 바이트 기반스트림에는 BufferedInputStream과 BufferedOutputStream이 있으며, 문자 기반 스트림에는 BufferedReader와 BufferedWriter가 있습니다. O
  • 문자 기반 스트림으로 최상위 스트림은 Reader입니다. X (문자 기반 스트림의 최상위 추상클래스)

 

 

문제 4. 다음 코드의 빈 칸을 완성해보세요.

첫 번째 빈칸은 while문의 조건으로 값이 있는 동안 반복해야한다.

=> read != -1 (또는)  read < 0

두 번째 빈칸은 스트림을 닫는다는 주석이 있으므로, close()가 와야한다.

=> in.close();

 

 

 

문제 5. 사용자가 키보드를 통해 입력한 내용을 파일로 출력하는 예제를 작성해보세요. 사용자가 "END"라고 입력하면 프로그램을 종료합니다.

빈칸 부분은 FileWriter을 객체 선언하는 부분으로 writer = new FileWriter("파일명. txt");가 와야한다.

 

 

 

문제 6. 과일 목록이 들어있는 텍스트 파일이 있습니다. 해당 목록에는 같은 과일이 중복되어 있습니다. 해당 파일을 읽어서 각 과일이 몇 번씩 기록되어 있는지를 출력하는 프로그램을 작성해보세요. 파일의 내용은 임의로 만듭니다.

package iostream;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

public class IOStream {
	public static void main(String[] args){
    	Map<String, Integer> datas = new HashMap<>(); //저장공간 <과일명, 개수>
        
        //파일 읽어오기
        BufferedReader reader;
        String line;
		try {
			reader = new BufferedReader(new FileReader("text.txt"));
			while((line = reader.readLine())!=null){
				boolean flag = false;
				for(String key : datas.keySet()){
					if(key.equals(line)){//만약 key값과 읽어온 값이 일치한다면
						datas.replace(key, datas.get(key)+1);
						flag = true;
						break;
					}
				}
				//일치하는 값이 없었다면
				if(!flag) {
					datas.put(line, 1);
				}
			}
			reader.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
        for(Entry<String, Integer> data : datas.entrySet()){
        	System.out.println(data.getKey()+" : "+data.getValue()+"개");
        }
	}
}

 

 

 

문제 7. 다음 빈칸에 알맞은 단어를 작성해보세요.

  • 바이트로 읽어들인 데이터를 문자로 변환해 주는 스트림을 [ 문자 변환 보조 스트림 ]이라고 합니다.
  • 자바 시스템 내부에서 사용하는 객체나 데이터를 외부에서 사용할 수 있도록 바이트 단위의 데이터로 변환하는 기술을 [ 직렬화 ](이)라고 하고 바이트로 변환된 데이터를 다시 객체로 변환하는 기술을 [ 역직렬화 ](이)라고 합니다.