2009-08-25 6 views
14

Quiero mejorar el comportamiento de plataforma cruzada de una aplicación Java. Sin embargo, su suite de prueba asume actualmente la existencia del directorio /tmp.¿Cuál es la mejor ventana equivalente para/tmp?

¿Cuál es la mejor ubicación equivalente en la plataforma de Windows? nótese bien Definitivamente no quiero suponer que el usuario tiene derechos de administrador, pero sí quiero que funcione al menos en XP, Vista & Windows7.

¿Existe una variable de entorno existente que ayudaría, y/o un conjunto de ubicaciones preferidas que podría probar en orden de preferencia?

+0

@ "¿Cuál es la mejor ubicación equivalente en la plataforma de Windows?" - verifique en 'Mi PC' \ Properties \ Advanced \ Environment Variables para las variables de entorno específicas del sistema y del usuario; típicamente las "carpetas temporales" se encuentran dentro de la Configuración local para el usuario actual; las versiones anteriores de Windows a menudo lo predeterminaban a una carpeta Temp en Windows; Personalmente siempre redirijo estas carpetas a "C: \ Temp" para que pueda efectuar una limpieza fácil. – Hardryv

+0

oxbow_lakes respondió básicamente a la pregunta que debería haber hecho. Otro desarrollador había codificado la ruta al directorio tmp en el banco de pruebas de modo que no se ejecutara en Windows, no podía escribir ni buscar y leer los datos de prueba posteriormente. Estaba buscando cómo cambiar las cosas para que las pruebas se ejecuten en cualquier plataforma sin hacer suposiciones sobre la ubicación del directorio tmp. java.io.tmpdir debería hacer el truco. –

Respuesta

31

la propiedad del sistema java.io.tmpdir se puede utilizar para el directorio temporal del usuario:

File tmp = new File(System.getProperty("java.io.tmpdir")); 

Esto puede ser preferible a File.createTempFile (que, en cualquier caso, se utiliza la propiedad tmpdir sistema bajo la campana) en el instancia en la que desea buscar para archivos temporales (por ejemplo, datos en caché de una invocación previa de su aplicación, que parece ser el caso de su pregunta).

Se puede cambiar el valor de la propiedad del sistema, proporcionando una anulación de tiempo de ejecución en la línea de comandos (un argumento JVM): -Djava.io.tmpdir=C:\foo\bar

Nota: la "trailing slash" issue descibed in the comments to seth's answer below se pueden evitar mediante el uso de la correspondiente File constructor:

String fileName = "foobar.txt" 
String tmpPath = System.getProperty("java.io.tmpdir"); 
File tmpFile; 
tmpFile = new File(tmpPath + File.separator + fileName); //possible problem 
tmpFile = new File(new File(tmpPath), fileName); //OK! 

Obviamente ventanas también tiene un entorno variable de DOS%TEMP% que podría ser utilizado desde cualquier scri pts que tiene

+0

Sí, siempre uso eso y generalmente funciona – Bostone

+0

Yo uso esto también. – pjp

8

¿Por qué no utilizar java.io.File.createTempFile()?

+0

Es posible que esté buscando archivos que se hayan soltado en el directorio temporal del usuario, en lugar de crearlos –

+0

Me encantan las personas que codifican las rutas y se enojan con Microsoft (y otras empresas) cuando las cosas cambian ... Llamadas de marco/SDK son tus amigos –

+1

@oxbow_lakes - He tenido problemas con java.io.tmpdir http://rationalpi.wordpress.com/2007/01/26/javaiotmpdir-inconsitency/ Tal vez haya cambiado, ya que ha pasado un tiempo desde que utilicé Java – seth

0

Use File.createTempFile("myPrefix","mySuffix").

2

Windows define las variables de entorno TEMP y TMP que dan la carpeta temporal del usuario actual.

+1

Puede encontrar que TMP solo existe en máquinas que tienen instaladas herramientas de desarrollador. – ChrisW

0

Si desea insistir en hacer algo que sea específico de Windows, puede usar la variable de entorno %temp%.

Cuestiones relacionadas