Szukam bezpiecznego sposobu na utworzenie pliku tymczasowego w Javie. Przez bezpieczne rozumiem:
- Nazwa powinna być unikalna, nawet w potencjalnych warunkach wyścigu (np. Inny wątek wywołuje tę samą funkcję w tym samym czasie lub inny proces uruchamia ten kod jednocześnie)
- Plik powinien być prywatny, nawet w przypadku potencjalnych warunków wyścigu (np. Inny użytkownik próbuje chmod plik z dużą szybkością)
- Mogę powiedzieć mu, żeby usunął plik, bez konieczności usuwania ogólnego i ryzykuję usunięcie niewłaściwego pliku
- Najlepiej byłoby upewnić się, że plik został usunięty, nawet jeśli wyjątek zostanie zgłoszony, zanim będę miał okazję
- Plik powinien domyślnie znajdować się w rozsądnej lokalizacji (np. Katalog tmp określony przez maszynę wirtualną JVM, domyślnie katalog tymczasowy systemu)
java
temporary-files
SRobertJames
źródło
źródło
File f = File.createTempFile(prefix, extension)
. Zostanie umieszczony w katalogu temp. A wraz zf.deleteOnExit()
nim zostanie automatycznie usunięty przy wyjściu.Odpowiedzi:
Użyj
File.createTempFile()
.File tempFile = File.createTempFile("prefix-", "-suffix"); //File tempFile = File.createTempFile("MyAppName-", ".tmp"); tempFile.deleteOnExit();
Utworzy plik w katalogu tymczasowym, na przykład:
źródło
tempFile.delete()
opróczdeleteOnExit
(ponieważ nie chcę mieć hord plików tymczasowych kręcących się przed wyjściem)?Od wersji Java 7 istnieje nowe API plików „NIO2”, które zawiera nowe metody tworzenia plików i katalogów temnp. Widzieć
na przykład
Path tempDir = Files.createTempDirectory("tempfiles");
lub
Path tempFile = Files.createTempFile("tempfiles", ".tmp");
źródło
String tempfilePath = System.getProperty("java.io.tmpdir"); tempfilePath = tempfilePath.concat("filename.extension");
nie wymaga przedrostka.
źródło