Я ищу безопасный способ создать временный файл на Java. Под безопасностью я имею в виду следующее:
- Имя должно быть уникальным даже в условиях потенциальной гонки (например, другой поток одновременно вызывает ту же функцию или другой процесс одновременно запускает этот код)
- Файл должен быть приватным, даже в условиях потенциальной гонки (например, другой пользователь пытается выполнить chmod файл с высокой скоростью)
- Я могу сказать ему, чтобы он удалил файл без общего удаления, и рискую удалить не тот файл
- В идеале следует убедиться, что файл удален, даже если возникнет исключение, прежде чем я получу возможность
- Файл должен по умолчанию находиться в разумном месте (например, JVM, указанный в каталоге tmp, по умолчанию - в системном временном каталоге)
java
temporary-files
Соберт Джеймс
источник
источник
File f = File.createTempFile(prefix, extension)
. Он будет помещен во временный каталог. И приf.deleteOnExit()
выходе автоматически удаляется.Ответы:
Используйте
File.createTempFile()
.File tempFile = File.createTempFile("prefix-", "-suffix"); //File tempFile = File.createTempFile("MyAppName-", ".tmp"); tempFile.deleteOnExit();
Создаст файл во временном каталоге, например:
источник
tempFile.delete()
в дополнение кdeleteOnExit
(так как я не хочу, чтобы орды временных файлов торчали перед выходом)?Начиная с Java 7 появился новый файловый API "NIO2", который содержит новые методы для создания файлов и каталогов temnp. Увидеть
например
Path tempDir = Files.createTempDirectory("tempfiles");
или
Path tempFile = Files.createTempFile("tempfiles", ".tmp");
источник
String tempfilePath = System.getProperty("java.io.tmpdir"); tempfilePath = tempfilePath.concat("filename.extension");
не требует префикса.
источник