프로그램을 개발하다 보면 실행 중에 일시적인 데이터를 저장할 임시 파일이 필요하고, 작업이 끝난 뒤에는 해당 파일을 삭제해야 하는 경우가 자주 있습니다.
Java에서는 java.nio.file.Files 클래스가 제공하는 createTempFile() 메서드를 사용하면 임시 파일을 손쉽게 만들 수 있습니다.
임시 파일 생성하기
다음 예제는 Files.createTempFile(prefix, suffix)를 호출하여 임시 파일을 생성합니다.
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public class CreateTempFile {
public static void main(String[] args) {
try {
// 임시 파일 생성
Path tempFile = Files.createTempFile("temp-", ".txt");
System.out.println("Temp file : " + tempFile);
} catch (IOException e) {
e.printStackTrace();
}
}
}
실행 결과:
Temp file : /var/folders/nyckvw0000gr/T/temp-2129139085984899264.txt
여기서 "temp-"는 파일 이름의 접두사(prefix), ".txt"는 접미사(suffix)입니다.
참고: 기본적으로 Java는 운영체제의 임시 디렉터리에 임시 파일을 생성합니다. 임시 디렉터리 경로는
System.getProperty("java.io.tmpdir")로 확인할 수 있습니다.
접미사에 따른 확장자 동작
접미사(suffix)를 null로 전달하면 임시 파일은 기본 확장자인 .tmp로 생성됩니다.
Path tempFile = Files.createTempFile("prefix-", null);
System.out.println("Temp file : " + tempFile);
// Temp file : /var/folders/nyckvw0000gr/T/prefix-17184288103181464441.tmp
반대로 접미사를 빈 문자열("")로 지정하면 확장자가 아예 없는 임시 파일이 생성됩니다.
Path tempFile = Files.createTempFile(null, "");
System.out.println("Temp file : " + tempFile);
// Temp file : /var/folders/nyckvw0000gr/T/1874152090427250275
특정 디렉터리에 임시 파일 생성하기
Java가 기본 임시 디렉터리를 선택하도록 두지 않고, 원하는 디렉터리를 직접 지정할 수도 있습니다.
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class CreateTempFile {
public static void main(String[] args) {
try {
Path path = Paths.get("target/tmp/");
// 지정한 디렉터리에 임시 파일 생성
Path tempFile = Files.createTempFile(path, null, ".log");
System.out.println("Temp file : " + tempFile);
} catch (IOException e) {
e.printStackTrace();
}
}
}
참고: 임시 파일이 정상적으로 생성되려면 지정한 디렉터리가 미리 존재해야 합니다. 디렉터리가 없으면
IOException이 발생하므로, 필요하다면Files.createDirectories(path)로 먼저 디렉터리를 만들어 주세요.
임시 파일 생성 후 데이터 쓰기
다음 예제는 임시 파일을 생성한 뒤, 텍스트 데이터를 파일에 기록합니다.
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class CreateTempFile {
public static void main(String[] args) {
try {
Path path = Paths.get("target/tmp/");
// 지정한 디렉터리에 임시 파일 생성
Path tempFile = Files.createTempFile(path, null, ".log");
System.out.println("Temp file : " + tempFile);
// 파일에 한 줄 쓰기
Files.write(tempFile, "Hello From Temp File\n".getBytes(StandardCharsets.UTF_8));
} catch (IOException e) {
e.printStackTrace();
}
}
}
이처럼 Files.createTempFile()과 Files.write()를 조합하면 임시 데이터를 안전하게 저장하고 관리할 수 있습니다. 작업이 끝난 임시 파일은 Files.delete(tempFile)로 즉시 삭제하거나, JVM 종료 시 자동으로 정리되도록 tempFile.toFile().deleteOnExit()을 활용하는 것이 좋습니다.
함께 읽으면 좋은 글
- Java 파일에 쓰기
- Java 파일 생성하기
- Java 파일 읽기