Java에서 Temp 파일을 만드는 안전한 방법은 무엇입니까?


96

Java에서 임시 파일을 만드는 안전한 방법을 찾고 있습니다. 안전하다는 것은 다음을 의미합니다.

  • 이름은 잠재적 인 경쟁 조건에서도 고유해야합니다 (예 : 다른 스레드가 동시에 동일한 기능을 호출하거나 다른 프로세스가이 코드를 동시에 실행).
  • 잠재적 인 경쟁 조건에서도 파일은 비공개 여야합니다 (예 : 다른 사용자가 높은 속도로 파일을 chmod하려고 시도).
  • 일반 삭제를 수행 할 필요없이 파일을 삭제하도록 지시 할 수 있으며 잘못된 파일을 삭제할 위험이 있습니다.
  • 이상적으로는 예외가 발생하더라도 파일이 삭제되었는지 확인해야합니다.
  • 파일의 기본값은 정상적인 위치 여야합니다 (예 : JVM에서 지정한 tmp dir, 기본값은 시스템 temp dir).

3
사용 File f = File.createTempFile(prefix, extension). 임시 디렉토리에 배치됩니다. 그리고 f.deleteOnExit()종료시 자동으로 삭제됩니다.
BackSlash

3
vm이 예외와 함께 종료되는 경우 종료시 삭제는 파일을 삭제하지 않습니다.
Johannes

답변:


130

사용 File.createTempFile().

File tempFile = File.createTempFile("prefix-", "-suffix");
//File tempFile = File.createTempFile("MyAppName-", ".tmp");
tempFile.deleteOnExit();

다음과 같이 임시 디렉토리에 파일을 생성합니다.

prefix-6340763779352094442- 접미사


1
참고로 Java는 그 사이에 임의의 숫자 문자열을 생성하므로 고유 한 접두사 / 접미사를 갖는 것에 대해 걱정할 필요가 없습니다.
Squeazer 2014

4
감독자! (종료 전에 임시 파일 무리를 갖고 싶지 않기 때문에) tempFile.delete()이외에도 정상 을 수행하는 데 문제가 deleteOnExit있습니까?
SRobertJames 2014

3
아니, 어느 쪽이든 할 수 있습니다.
Stefan

1
@SRobertJames : 문제 없습니다. 문제는 예측 가능한 이름으로 임시 파일을 생성 하면 보안 문제가 발생한다는 것입니다. 적절한 권한을 사용하여 안전한 방식으로 생성되면 그렇지 않습니다.
Markus W Mahlberg 2014

1
나는 이것이 안전하다고 생각하지 않을 것입니다. 생성 된 파일은 누구나 읽을 수 있으며 모든 사용자가 액세스 할 수있는 tmp 디렉토리에 있습니다.
Peter Gerber


0
String tempfilePath = System.getProperty("java.io.tmpdir");
tempfilePath = tempfilePath.concat("filename.extension");

접두사가 필요하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.