2010-03-15 17 views
7

Tak więc piszę aplikację Java, która używa Simple do przechowywania danych jako pliku xml, ale jest piekielnie powolna z dużymi plikami, gdy przechowuje na dysku sieciowym w porównaniu do lokalnego dysku twardego. Chciałbym przechowywać go lokalnie przed skopiowaniem do wybranego miejsca docelowego.Wyszukiwanie tymczasowego przechowywania plików w Javie

Czy istnieje jakiś inteligentny sposób na znalezienie tymczasowego lokalnego przechowywania plików w Javie w sposób niezależny od systemu?

Np. coś, co zwraca coś takiego, jak c:/temp w systemie Windows, /tmp w systemie Linux, a także w przypadku innych platform (takich jak mac). Mogę użyć ścieżki aplikacji, ale problem polega na tym, że aplikacja Java jest uruchamiana również z dysku sieciowego.

+6

Użyj 'File.createTempFile (prefix, suffix)'. –

Odpowiedz

11

Spróbuj:

String path = System.getProperty("java.io.tmpdir"); 

Patrz: http://java.sun.com/javase/6/docs/api/java/lang/System.html#getProperties%28%29

I je dodać tutaj ze względu na kompletność, jak wic wymienionego w swoim komentarzu, jest równie metod createTempFile(String prefix, String suffix) i createTempFile(String prefix, String suffix, File directory) metody z File klasy Java.

+0

createTempFile() był dokładnie tym, czego szukałem, oznaczony jako odpowiedź z powodu kompletności. – Spoike

3
System.getProperty("java.io.tmpdir") 

W System i Runtime klasy są te, których Javadocs należy najpierw sprawdzić, kiedy wymagane jest coś związane z systemem.

1

spróbować System.getProperty("java.io.tmpdir");

2

W duchu „niech rozwiązać problem” zamiast „niech odpowiedzieć na konkretne pytanie”:

Jaki rodzaj strumienia wejściowego używasz podczas czytania na proste? Upewnij się, że używasz BufferedInputStream (lub BufferedReader) - w przeciwnym razie odczytujesz jeden bajt/znak naraz ze strumienia, który będzie boleśnie powolny podczas odczytu zasobów sieciowych.

Zamiast kopiować plik na dysk lokalny, buforuj dane wejściowe, a będziesz gotowy do pracy.

+0

W trybie Prostym określasz jedynie, która klasa musi być punktem początkowym serializacji xml, a obiekt File do miejsca, w którym musi zapisać plik. Jedyne, co muszę wiedzieć, to znaleźć "tymczasowy katalog plików", na który inni mi odpowiedzieli. – Spoike

+0

Możesz także użyć strumieni, jeśli chcesz, na przykład w Simple możesz użyć Serializer.write (myObject, nowy BufferedOutputStream (nowy FileOutputStream (nowy plik ("myFile.xml")))). W razie potrzeby buforowanie będzie nieco lepsze dla ciebie. –

+0

użyj zbuforowanego strumienia - spróbuj, myślę, że będziesz zaskoczony różnicą, jaką sprawia. –

Powiązane problemy