2013-05-22 9 views
6

Czy istnieje sposób kontrolowania losowych cyfr dodawanych do nazwy pliku podczas tworzenia pliku tempFile? Na przykład. jeśli napiszę File.createTempFile("abc",".pdf"), utworzy plik o nazwie abc12323543121.pdf. Zamiast tych cyfr można dołączyć znacznik czasu? Potrzebuję tego, ponieważ dla każdego tworzonego pliku muszę dodać znacznik czasu do pliku, co powoduje, że nazwa pliku jest dość długa. Tak więc, zamiast losowo generowanych cyfr, gdybym mógł po prostu użyć znacznika czasu, byłoby naprawdę świetnie.Uzyskiwanie kontroli nad nazwą pliku tymczasowego utworzonego w języku Java

+4

Czy istnieje powód, dla którego tworzysz pliki jako pliki tymczasowe, a nie w zwykły sposób? W ten sposób będziesz mieć pełną kontrolę nad ich nazwiskami. – Philipp

+0

'createTempFile()' jest odpowiedzialny za uczynienie tego pliku unikalnym, nawet jeśli wywołasz go 1000 razy w ciągu jednej sekundy. Musi mieć możliwość dodania prefiksu lub postfiksu. –

+1

@Philipp W końcu wdrożyłem go w normalny sposób, ale w katalogu temp, który jest mniej więcej podobny do metody createTempFile, ale z większą kontrolą losowego nazewnictwa. – Adarsh

Odpowiedz

7

Wygląda na to, że API nie udostępnia tego bezpośrednio. Możesz jednak zajrzeć do kodu źródłowego File.createTempFile(), aby zobaczyć, w jaki sposób jest zaimplementowany, a następnie samodzielnie zaimplementować wymaganą metodę.

Zasadniczo createTempFile() tworzy obiekt File z zamierzoną nazwą pliku, a następnie używa FileSystem.createFileExclusively() do utworzenia pliku. Ta metoda zwraca false, jeśli plik już istnieje, w którym to przypadku nazwa pliku jest modyfikowana (przy użyciu innej liczby losowej), a tworzenie jest ponawiane.

Można zastosować to samo podejście, ale należy pamiętać, że FileSystem to klasa prywatna pakietu, dlatego nie można jej używać we własnej metodzie. Zamiast tego użyj File.createNewFile(), aby utworzyć plik atomowo. Ta metoda zwraca także false, jeśli plik już istnieje, więc możesz go użyć w podobnej pętli, jak createTempFile(), używając metody createFileExclusively().

+1

Mam zaimplementowałem własną metodę tworzenia nowego pliku w temp dir na podstawie danych wejściowych z obu odpowiedzi. Dziękuję. – Adarsh

7

Można utworzyć własną metodę użytkową do tworzenia plików tymczasowych. Zasadniczo pliki tymczasowe są przechowywane w katalogu tymczasowym w następujący sposób:

public File createTempFile(String prefix, String suffix){ 
    String tempDir = System.getProperty("java.io.tmpdir"); 
    String fileName = (prefix != null ? prefix : "") + System.nanoTime() + (suffix != null ? suffix : "") ; 
    return new File(tempDir, fileName); 
} 
+1

Użyłem rozwiązania dostarczonego przez Andreasa, aby utworzyć plik atomicznie w katalogu tymczasowym zgodnie z sugestią użytkownika. Dziękuję Ci. – Adarsh

Powiązane problemy