본문 바로가기

java

[java] File 지우기. delete vs deleteOnExit()

.delete() 함수는 실행 즉시 파일을 삭제하고 deleteOnExit()은 jvm이 종료할 때 파일을 삭제한다.

.delete()

실행 시점 즉시 파일 삭제

File inputFile = new File(fileName);
InputStream inputStream = new FileInputStream(inputFile);
byte[] buf = new byte[1024];
int len;
while( (len = inputFile.read(buf)) > 0 ){
    outputStream.write(buf, 0, len);
}
inputFile.delete();  // 파일 삭제

유의할 점

실행 시점에 즉시 삭제되므로, 파일을 사용하는 모든 작업이 끝난 뒤에 실행하도록 코드를 작성해야 한다.

장점

파일이 쌓이지 않고 바로 삭제된다.

만약 파일을 outstream에 쓰거나, 출력해서 더 이상 쓸 필요가 없어지면 그 시점에 바로 delete로 삭제하는게 더 좋다.

deleteOnExit()

실행 시점이 아닌 jvm이 종료할 때 파일을 삭제한다.

File inputFile = new File(fileName);
inputFile.deleteOnExit();  // 파일 삭제
InputStream inputStream = new FileInputStream(inputFile);
byte[] buf = new byte[1024];
int len;
while( (len = inputFile.read(buf)) > 0 ){
    outputStream.write(buf, 0, len);
}

유의할점

따라서 jvm이 실행중인 상태에서는 계속해서 파일이 쌓인다.

예를들어 배포 후 계속 돌아가는 서버에서 deleteOnExit을 사용한다면, 서버를 종료하지 않는 이상 파일이 삭제되지 않는다.

장점

파일을 사용하는 작업이 끝난 시점을 고려할 필요 없어서 코드 작성이 쉽다.

반응형