JAVA/JAVA Academy Project

JAVA 시험 대비로 만들어보는 초급 문제 : 파일의 입출력

우아개발자 2023. 11. 7.

java 시험 대비로 만들어보는 초급 문제 두 가지를 이야기해 보겠습니다. 사실 자바 초급단계에서 중요한 것은, 어려운 알고리즘의 문제보다는 기본적인 자바 프로그래밍 언어를 이해하고 있는가가 아닌가 싶은데요. 그래서 첫 시험인 만큼은 난이도 조절이 있기 때문에 무난하게 보지 않을까라는 생각을 하고는 합니다.

 

물론 글을 쓰는 저도 공부가 부족하기 때문에 이렇게 글을 올리며 흐름을 파악하려는 의도가 있겠죠. 서론은 이만하고, 자바 초급 중 초급인 파일의 입출력에 대해 알아보도록 하겠습니다.

 

이렇게 글을 쓰게 돼버리면, 문자열로 받고 있는 안녕하세요라는 것은 상수로서 고정값을 유지하게 됩니다. 아래의 코드는 주석처리를 해주세요.

String str = "안녕하세요?"
System.out.println(str);

하지만 우리는 상수의 표현이 아니라 자바의 프로그램이나 기타 외의 프로그램이 종료되더라도 메모장에 저장하고 싶다면 어떤 입출력 키워드를 사용해야 할까요? 우리가 입력한 값을 한번 받아보는 작업을 해보겠습니다.

(1)  파일의 입출력 : 스캐너로 입력할 값 받기

Scaaner sc = new Scanner(System.in0;
System.out.println("아무거나 입력하세요: ");
Striing str = sc.nextLine();

 

우리가 입력한 값을 그대로 프로그램이 종료되어도 메모장에 저장하고 싶다면 아래와 같이 파일의 객체를 만들어줄 겁니다.

(2)  파일의 확장자명 확인 : 클래스명과 확장자명 기재

File ifle = new File("test.txt");

그리고 당연한 것은 라이브러리를 추가해 주고, 실제 파일을 생성해 줄 텐데요. (실제 메모장을 생성해 줄 겁니다. 생성의 키워드는 create을 사용해 봅니다. 하지만, 파일을 생성하며 예외를 잡아줄 것이기 때문에 try catch문을 미리 만들어줍니다.

(3)  try catch문 이때 catch문은 exception  : 예외를 잡기

try {

}catch(exception e) {
	System.out.prinln(e);

이제 문자로 저장할 내용을 입력해 줄 텐데요. 파일을 생성으로 끝나는 것이 아니라, 입력한 내용을 덮어씌우는 것이 아닌 그대로 저장을 해야 하기 때문에  write를 적어줍니다. 아래와 같이 말이죠.

(4)  createNewFile과 FileWriter 객체의 생성과 "\n"

file.createNewFile();

FileWriter fw = new FileWriter(file,true);
fw.write(str + "\n");
fw.close

 

그리고 이제 읽을 수 있는 코드를 만들어줘야 하는데요. catch로 닫기 전에 try문을 한번 더 생성합니다. 이번엔 읽어야 하니 FileReader로서 객체를, 그리고 한 줄씩 읽을 수 있는 BufferedReader의 객체를, 마지막으로는 데이터를 가져오도록 합니다.

(5)  FileReader와 BufferedReader

try {
	FileReader fr = new FileReader(file);
   	BufferedReader br = new BufferedReader(fr);
    	String data = br.readLine();

마지막으로 데이터를 문자열로 받는 것은 버퍼에서 읽어 들인 것을 받는 것임을 참고해 주세요. 그리고 마지막으로 반복합니다. " 반복해 줘, 만약에 데이터 문자열에 null값이 없다면, 데이터를 출력해 주고, 그다음 줄을 가지고 와줘"라고요.

(5)  While문과 null

while(data != null) {
   System.out.println(data);
        
    data = br. readLine();
 }
 
System.out.println(fr.read());
 fr.close();
			 
	 }catch(Exception e) {
		 System.out.println(e);
	 }
		 
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

그리고 두 번의 try문을 닫아주면 됩니다.

코드정리

package TAKE;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class FileMain {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		System.out.println("아무거나 입력:");
		String str = sc.nextLine();
		
		File file = new File("test.txt");

		try {
			file.createNewFile();

		 FileWriter fw	= new FileWriter(file,true);
		 fw.write(str + "\n");
		 fw.close();
         
		 try {
			 FileReader fr = new FileReader(file);
			 BufferedReader br = new BufferedReader(fr);
			 String data = br.readLine();
			 
			 while(data != null) {
				 System.out.println(data);
				 data = br.readLine(); 
			 }
			 System.out.println(fr.read());
			 fr.close();
		 }catch(Exception e) {
			 System.out.println(e);
		 }
 
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(str);
	
	}

}

댓글