개인참고자료/자바(네트워크)

바이트 기반 스트림 - File 클래스를 이용한 임시파일의 생성과 삭제

경진 2008. 7. 13. 11:20
File 클래스를 이용한 임시파일의 생성과 삭제 

프로그램을 작성하다 보면 임시로 파일을 생성할 필요하 생긴다. 예를 들어 외부 파일을 이용해서 정렬할 경우가 대표적인 예다. 하지만 문제는 "외부 파일명을 어떻게 정할 것인가?"하는 부분이다. 동일한 이름의 파일이 있을 경우에는 심각한 문제가 발생할 수 있기 때문이다. 이러한 문제점을 해결하기 위해서 File 클래스는 임시 파일을 생성하는 createTempFile()이라는 static한 메소드를 포함하고 있다.

createTempFile() 메소드를 이용해서 생성되는 임시 파일의 경우, 파일의 앞 글자와 뒷글자만 사용자가 정의하면 중간의 문자열은 임의 글자로 자동으로 지정된다. 이 경우, 자동으로 생성되는 파일명은 임시 파일이 저장되는 디렉토리에서는 유일한 이름으로 지정된다.

윈도우의 경우 임시 파일은 환경 변수 'TMP'로 지정된 디렉토리에 자동으로 생성된다. 이렇게 생성된 소스는 프로그램이 종료된 후에는 대부분 필요가 없어진다. 임시파일의 경우, 삭제하지 않는다면, 나중에는 수많은 임시 파일이 파일 시스템에 저장되어 있다. 이를 해결하려고 File 클래스는 deleteOnExit() 메소드를 제공한다. 해당 메소드를 호출하면 해당 파일은 JVM이 종료될 때 자동으로 삭제된다.

import java.io.*;

public class TempFile {

    public static void main(String[] args) {
        try {
            File f = File.createTempFile("tmp_", ".dat");
            System.out.println("60초 동안 멈춰있습니다.");
            f.deleteOnExit(); // JVM이 종료될 때 임시파일을 자동으로 삭제한다.
            try {
                Thread.sleep(60000); // 60초 동안 프로그램이 멈춰있는다.
            } catch (InterruptedException e1) {
                System.out.println(e1);
            }

        } catch (IOException e) {
            System.out.println(e);
        }
    } // main end
}

결과화면

위의 그림과 같이 임시 파일을 생성하는 TempFile 클래스를 실행한 후 60초간 쉴때 아래의 그림과 같이 디렉토리 내용을 살펴보면 'tmp_41005.dat' 파일과 같이 'tmp_'로 시작하고 '.dat'로 끝나는 파일이 있는 것을 확인 할 수 있다. 그리고 나서 60초가 지난 후 다시 파일의 목록을 확인해보면 임시파일이 삭제된 것을 확인 할 할 수있다.

결과화면