2012-04-26 30 views
6

Estaba leyendo algún libro de Java y haciendo algunos pequeños programas para la práctica, he creado un pequeño código para obtener información acerca de la ruta que entré, y el código es:Diferencia entre C: y C:/

String path = JOptionPane.showInputDialog("Enter Path to analyze"); 

File file = new File(path); 

if (file.exists()) 
{ 
    String result = ""; 
    if (file.isDirectory()) 
    { 
     result += "Path is directory\n "; 
     String [] resList = file.list(); 

     for (String s : resList) 
     { 
      result += s + ", "; 
     } 
    } 
    if (file.isFile()) 
    { 
     result += "Path is a file\n"; 
    } 

    JOptionPane.showMessageDialog(null, result); 

ahora en el diálogo de entrada, cuando entro C:, el resultado es build, build.xml, manifest.mf, nbproject, src, pero cuando entro en C: /, se muestra la lista completa de los directorios y archivos en C.

y curiosamente no ocurre con el Unidad D y otras unidades (es decir, el resultado es el mismo para D:/y D :), ¿qué está pasando, por favor explique?

Actualización ¡Lo mismo sucede en WPF con C#!

+5

Hehe, Windows es divertido :) –

+0

¿Cuál es el resultado deseado? Asegure o elimine '/' de su ruta, en función del resultado que realmente desee. –

+0

Ningún resultado deseado, solo estaba escribiendo código para la práctica – SpeedBirdNine

Respuesta

9

C: significa "el directorio que esté seleccionado actualmente en la unidad C:". En su caso, es probablemente el directorio desde el que se ejecuta su aplicación.

D: es lo mismo que D:/ en su caso porque el directorio raíz es el directorio de trabajo actual en D:.

+2

Windows definitivamente rastrea el CWD en cada unidad por separado, y además de eso rastrea la unidad de trabajo actual. La combinación de esos dos es lo que usted conoce como CWD en un * nix. –

+0

@Marko: Sí, acabo de registrar un 'cmd.exe' y me di cuenta. ¡Gracias! –

+0

Sí, de hecho es el directorio actual del que se está ejecutando el proyecto porque el resultado en el caso de C: ¡son exactamente los archivos y carpetas en la carpeta del proyecto! Un comentario dijo que este comportamiento no se puede repetir en Windows 7 (ese comentario probablemente se haya eliminado), por lo que probablemente solo sea específico de Windows Vista. Aunque no he verificado ninguna otra versión de Windows. – SpeedBirdNine

3

Esto no es realmente una pregunta de Java, sino una pregunta de Windows/dos.

La explicación se reduce al antiguo comando dos para cambiar unidades.

Escribir una letra de unidad seguida de dos puntos es un comando para cambiar las unidades en dos, por lo tanto, el 'comando' C: no hace nada ya que su directorio de trabajo ya está en la unidad C. El 'directorio' devuelto por la interfaz nativa al JRE es el mismo que si usara la ruta "", es decir, su directorio de trabajo.

Por otro lado, agregue una barra inclinada y es una ruta correcta, a la raíz de su unidad C, por lo tanto, su JRE recibe este directorio por la interfaz nativa.

Si va a un comando dos (windows> run> cmd) y escribe C: verá que acepta el comando pero no cambia de directorio, a menos que, por supuesto, se encuentre actualmente en una unidad diferente en ese momento.

espero que ayude.

Cuestiones relacionadas