Qual é uma maneira segura de criar um arquivo Temp em Java?


96

Estou procurando uma maneira segura de criar um arquivo temporário em Java. Por seguro, quero dizer o seguinte:

  • O nome deve ser único, mesmo sob condições de corrida em potencial (por exemplo, outro Thread chama a mesma função ao mesmo tempo, ou outro processo executa este código simultaneamente)
  • O arquivo deve ser privado, mesmo em condições de corrida em potencial (por exemplo, outro usuário tenta o arquivo chmod em alta velocidade)
  • Posso dizer para ele excluir o arquivo, sem ter que fazer uma exclusão genérica, e arriscar excluir o arquivo errado
  • O ideal é garantir que o arquivo seja excluído, mesmo que uma exceção seja lançada antes que eu tenha a chance de
  • O arquivo deve ser padronizado para um local adequado (por exemplo, o diretório tmp especificado pela JVM, padronizando para o diretório temporário do sistema)

3
Use File f = File.createTempFile(prefix, extension). Ele será colocado no diretório temporário. E com f.deleteOnExit()ele será excluído automaticamente na saída.
BackSlash

3
Excluir ao sair não excluirá o arquivo, se a VM sair com uma exceção.
Johannes

Respostas:


129

Use File.createTempFile().

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

Irá criar um arquivo no diretório temporário, como:

prefixo-6340763779352094442-sufixo


1
Apenas para sua informação, você não precisa se preocupar em ter um prefixo / sufixo exclusivo, pois o Java criará uma string aleatória de números entre eles.
Squeazer

4
Super! Algum problema ao fazer um normal tempFile.delete()além do deleteOnExit(já que não quero ter hordas de arquivos temporários antes de sair)?
SRobertJames

2
Não, você pode fazer isso de qualquer maneira.
Stefan

1
@SRobertJames: Sem problemas. O fato é que a criação de arquivos temporários com nomes previsíveis impõe problemas de segurança. Depois de criados de forma segura com as permissões adequadas, eles não o fazem.
Markus W Mahlberg

1
Eu não consideraria isso seguro, o arquivo criado é legível por todos e reside no diretório tmp que tende a ser acessível a qualquer usuário.
Peter Gerber

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.