2010-03-15 14 views
7

Estoy escribiendo una aplicación Java que usa Simple para almacenar datos como archivo xml, pero es tremendamente lento con archivos grandes cuando se almacena en una unidad de red en comparación con un disco duro local. Así que me gustaría almacenarlo localmente antes de copiarlo en el destino deseado.Encontrar almacenamiento temporal de archivos en Java

¿Existe alguna manera inteligente de encontrar un almacenamiento de archivos local temporal en Java de una manera independiente del sistema?

E.g. algo que devuelve algo como c:/temp en Windows, /tmp en Linux, y lo mismo para otras plataformas (como mac). Podría usar la ruta de la aplicación pero el problema es que la aplicación Java también se ejecuta desde la unidad de red.

+6

Use 'File.createTempFile (prefijo, sufijo)'. –

Respuesta

11

Probar:

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

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

Y para añadir aquí para completarlo, como wic mencionó en su comentario, también hay los métodos createTempFile(String prefix, String suffix) y createTempFile(String prefix, String suffix, File directory) métodos de la clase de Java File.

+0

createTempFile() era exactamente lo que estaba buscando, marcó esto como respuesta debido a la integridad – Spoike

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

Los System y Runtime clases son aquellos cuya javadocs debe comprobar primero cuando se requiere algo relacionado con el sistema.

1

tratar System.getProperty("java.io.tmpdir");

2

En el espíritu de 'vamos a resolver el problema' en lugar de 'vamos a responder a la pregunta específica':

¿Qué tipo de flujo de entrada está usando cuando se lee en simple? Asegúrese de usar BufferedInputStream (o BufferedReader); de lo contrario, está leyendo un byte/carácter a la vez de la transmisión, lo que será extremadamente lento al leer un recurso de red.

En lugar de copiar el archivo en el disco local, búfer las entradas y estará listo para funcionar.

+0

En Simple solo especifica qué clase necesita ser el punto de partida de la serialización xml y un objeto File donde necesita escribir el archivo. Entonces, lo único que necesito saber es cómo encontrar el "directorio temporal de archivos", que otros han respondido por mí. – Spoike

+0

También puede usar streams si lo desea, por ejemplo, en Simple puede usar Serializer.write (myObject, new BufferedOutputStream (new FileOutputStream (new File ("myFile.xml")))). Esto amortiguará la salida un poco mejor para usted si lo desea. –

+0

usa una secuencia de almacenamiento en búfer - pruébalo, creo que te sorprenderá la diferencia que hace. –

Cuestiones relacionadas