2009-08-05 5 views
6

Casi todos los artículos que leí me dijeron que no puedes tener chdir en Java. La respuesta aceptada al this question dice que no se puede hacer en Java.¿Por qué la propiedad del sistema user.dir funciona en Java?

Sin embargo, éstas son algunas de las cosas que he intentado:

 
[email protected]:~$ java -version 
java version "1.6.0_14" 
Java(TM) SE Runtime Environment (build 1.6.0_14-b08) 
Java HotSpot(TM) Client VM (build 14.0-b16, mixed mode, sharing) 

Aquí es una clase de prueba que estoy usando:

import java.io.*; 

public class Ch { 
    public static void main(String[] args) { 
     System.out.println(new File(".").getAbsolutePath()); 
     System.setProperty("user.dir","/media"); 
     System.out.println(new File(".").getAbsolutePath()); 
    } 
} 
 
[email protected]:~$ pwd 
/home/geo 
[email protected]:~$ java Ch 
/home/geo/. 
/media/. 

explique por qué esto funcionó. ¿Puedo usar esto a partir de ahora y esperar que funcione de la misma manera en todas las plataformas?

Respuesta

10

El hecho de que new File(".") dé la respuesta deseada no significa que está haciendo lo que usted desea.

Por ejemplo, trate de:

new FileOutputStream("foo.txt").close(); 

Donde hace que terminan? En mi cuadro de Windows, aunque new File(".").getAbsolutePath() se mueve según user.dir, foo.txt siempre se crea en el directorio de trabajo original. Me parece que configurar user.dir de manera que new File(".")no se llama, consulte el directorio de trabajo actual que solo está buscando problemas.

+0

No probé eso :). Me detuve cuando vi que el cambio de la propiedad user.dir se refleja en la clase File. – Geo

+1

Eso es tan ... tan ... así que ... *** mal ***. :-) –

6

Cita:

La propiedad user.dir se establece en el arranque VM ser el directorio de trabajo. No debe cambiar esta propiedad o configurarla en la línea de comandos. Si lo hace, entonces verá un comportamiento incoherente ya que hay lugares en la implementación que asume que user.dir es el directorio de trabajo y que no cambia durante la vida útil de la VM.

La discusión es here

1

File.getAbsoluteFile() es sólo mirar a la propiedad del sistema user.dir, que es una copia del directorio de trabajo del proceso en el arranque VM.

Una mejor prueba podría ser comprobar que el directorio de trabajo del proceso realmente está cambiando. ¿Cómo se puede hacer esto varía según la plataforma, pero en Linux que pueda para algo como:

$ ls -l /proc/18037/cwd 
lrwxrwxrwx 1 laurence laurence 0 2009-08-05 11:16 /proc/18037/cwd -> /home/laurence/ 

donde "18037" es el pid del proceso en cuestión. Si hace esto, creo que encontrará que el directorio de trabajo del proceso en realidad no cambia cuando actualiza user.dir.

Cuestiones relacionadas