Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 파일 다루기: File, FileReader, FileWriter 클래스 완벽 정리

Java에서 파일 처리가 필요한 이유

Java로 프로그램을 개발하다 보면 파일을 다뤄야 하는 상황이 자주 찾아옵니다. 프로그램의 실행 결과를 파일로 저장해야 할 수도 있고, 반대로 파일에 저장된 데이터를 읽어와 가공·분석해야 할 수도 있습니다.

이럴 때 활용되는 것이 바로 java.io 라이브러리입니다. java.io는 Java에서 파일과 디렉터리를 손쉽게 다룰 수 있도록 다양한 클래스와 메서드를 제공합니다.

이 글에서는 Java의 대표적인 파일 처리 클래스인 File, FileReader, FileWriter의 핵심 메서드를 예제와 함께 살펴보고, 실제 코드에서 어떻게 활용하는지 알아보겠습니다.

Java의 파일(File)과 디렉터리(Directory)

파일은 컴퓨터에서 특정 정보를 저장하는 단위입니다. 예를 들어 수학 수업 학생 명단을 담은 파일, 커피 케이크를 만들 때 필요한 재료 목록을 담은 파일 등이 있을 수 있습니다. 디렉터리(폴더)는 이러한 파일들이나 다른 디렉터리들을 모아 저장하는 공간입니다.

java.io 라이브러리에는 파일과 디렉터리를 조작할 수 있는 여러 패키지가 포함되어 있으며, 이 글에서는 그중 File, FileReader, FileWriter 세 가지에 집중합니다.

이 클래스들은 외부 패키지에 속해 있기 때문에 코드에서 사용하기 전에 반드시 임포트(import)해야 합니다.

필요한 클래스 임포트하기

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

Java로 파일 생성하기

Java의 File 클래스는 빈 파일을 생성할 때 사용합니다.

단, 파일을 만들기 전에 먼저 File 객체를 생성해야 합니다. File 객체는 코드에서 특정 파일이나 폴더를 나타내는 추상적인 표현일 뿐, 객체만으로는 실제 파일이 만들어지지 않습니다. 객체를 생성한 후 별도의 메서드를 호출해야 실제 파일이 생성됩니다.

File 객체를 생성하는 기본 문법은 다음과 같습니다.

File fileName = new File(String filePath);

위 코드에서는 fileName이라는 이름의 File 객체가 만들어지며, 이 객체는 filePath 변수에 지정한 경로에 있는 파일이나 폴더를 가리킵니다.

실제 파일을 생성하려면 createNewFile() 메서드를 사용합니다. 이 메서드는 지정한 경로에 새 파일을 만들며, 성공적으로 생성되면 true, 같은 위치에 이미 파일이 존재하면 false를 반환합니다.

파일 생성 예제

2019년 S&P 500 지수의 과거 주가 데이터를 분석하는 프로그램을 만든다고 가정해 보겠습니다. 분석 결과를 저장할 새 파일을 미리 만들어 두려면 다음과 같이 코드를 작성할 수 있습니다.

import java.io.File;

class CreateFile {
	public static void main(String[] args) {
		File resultsFile = new File("/home/data_analysis/2019sandp500/result.txt");

		boolean fileCreated = resultsFile.createNewFile();
		if (fileCreated) {
			System.out.println("The results file has been created.");
		} else {
			System.out.println("The results file already exists.");
		}
	}
}

코드를 실행하면 /home/data_analysis/2019sandp500/result.txt 경로에 파일이 생성되고, 콘솔에는 다음과 같이 출력됩니다.

The results file has been created.

반면, 이미 같은 이름의 파일이 존재한다면 아래 메시지가 출력됩니다.

The results file already exists.

코드 단계별 설명

먼저 파일 관련 메서드가 담긴 java.io.File을 임포트하고, 프로그램 코드를 담을 CreateFile 클래스를 선언했습니다.

main 메서드의 첫 줄에서는 /home/data_analysis/2019sandp500/result.txt 경로의 파일을 나타내는 resultsFile 객체를 생성합니다. 이어서 createNewFile() 메서드로 해당 경로에 새 파일을 만들고, 그 boolean 반환값을 fileCreated 변수에 저장합니다.

마지막으로 if문을 통해 fileCreated 값이 true이면 "The results file has been created."를, false이면 "The results file already exists."를 출력합니다. 이 예제에서는 해당 파일이 없었기 때문에 새 파일이 정상적으로 생성되었습니다.

Java 파일 읽기

FileReader 클래스의 read() 메서드를 사용하면 파일의 내용을 읽어올 수 있습니다.

예를 들어 /home/data_analysis/2019sandp500/raw_message.txt 파일에 다음 텍스트가 저장되어 있다고 가정해 보겠습니다.

JAVA S&P 500 ANALYSIS PROGRAM

이 파일의 내용을 읽어오는 코드는 다음과 같습니다.

import java.io.FileReader;

class Main {
	public static void main(String[] args) {
		char[] array = new char[100];
		try {
			FileReader fileContents = new FileReader("/home/data_analysis/2019sandp500/raw_message.txt");

			fileContents.read(array);
			System.out.println(array);

			fileContents.close();
		} catch(Exception error) {
			error.getStackTrace();
		}
	}
}

실행 결과는 다음과 같습니다.

JAVA S&P 500 ANALYSIS PROGRAM

이 프로그램에서는 FileReader 클래스로 해당 경로의 파일 내용을 나타내는 객체를 만든 뒤, read() 메서드로 파일 내용을 char 배열에 담았습니다. 그리고 배열의 내용을 콘솔에 출력한 후, close() 메서드로 파일을 닫아 시스템 리소스를 해제했습니다.

Java 파일에 쓰기

FileWriter 클래스의 write() 메서드를 사용하면 파일에 데이터를 기록할 수 있습니다.

예를 들어 데이터 분석 결과가 저장된 파일 맨 앞에 오늘 날짜를 기록하고 싶다고 가정해 보겠습니다. 파일 경로는 /home/data_analysis/2019sandp500/results.txt입니다.

import java.io.FileWriter;

class Main {
	public static void main(String args[]) {
		String date = "Thursday, March 12th";
		try {
			FileWriter writeToFile = new FileWriter("/home/data_analysis/2019sandp500/results.txt");

			writeToFile.write(date);

			writeToFile.close();
			System.out.println("The date has been written to the file.");

		} catch (Exception error) {
			error.getStackTrace();
		}
	}
}

이 코드는 Thursday, March 12th라는 문자열을 results.txt 파일에 기록하고, 콘솔에는 다음을 출력합니다.

The date has been written to the file.

실행 후 results.txt 파일의 내용은 다음과 같습니다.

Thursday, March 12th

예제에서는 먼저 대상 파일을 나타내는 FileWriter 객체 writeToFile을 생성했습니다. 이후 write() 메서드로 문자열을 파일에 기록하고, close() 메서드로 파일을 안전하게 닫았습니다.

Java 파일 삭제하기

File 클래스는 파일이나 디렉터리를 삭제하는 delete() 메서드를 제공합니다.

delete()는 지정한 파일이 성공적으로 삭제되면 true, 파일이 존재하지 않으면 false를 반환합니다. 또한 이 메서드는 내용이 비어 있는 디렉터리만 삭제할 수 있다는 점에 유의하세요.

프로그램 시작 시 기존 results.txt 파일을 삭제해 두었다가, 나중에 새 데이터를 다시 기록한다고 가정해 보겠습니다.

import java.io.File;

class Main {
	public static void main(String[] args) {
		File results = new File("/home/data_analysis/2019sandp500/results.txt");

		boolean deleteFile = results.delete();
		if (deleteFile) {
			System.out.println("results.txt has been deleted.");
		} else {
			System.out.println("results.txt has not been deleted.");
		}
	}
}

코드를 실행하면 results.txt 파일이 삭제되고 콘솔에 다음이 출력됩니다.

results.txt has been deleted.

이 예제에서는 results.txt 파일을 나타내는 File 객체 results를 만든 뒤, delete() 메서드로 파일을 삭제했습니다. 삭제에 성공하면 "results.txt has been deleted.", 실패하면 "results.txt has not been deleted."가 출력됩니다.

마무리

지금까지 배운 내용을 정리하면 다음과 같습니다.

  • File 클래스: 파일 생성(createNewFile()) 및 삭제(delete())
  • FileReader 클래스: 파일 내용 읽기(read())
  • FileWriter 클래스: 파일에 데이터 쓰기(write())

이 글에서는 File, FileReader, FileWriter 클래스를 활용해 Java에서 파일을 생성, 읽기, 쓰기, 삭제하는 방법을 실제 예제와 함께 살펴보았습니다. 이제 여러분도 전문 개발자처럼 Java에서 파일을 자유롭게 다룰 준비가 되었습니다!