2012-04-26 8 views
6

Je viens juste de lire un livre de java et de faire quelques petits programmes pour la pratique, je créé un petit code pour obtenir des informations sur le chemin je suis entré, et le code est:Différence entre C: et 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); 

maintenant dans le dialogue d'entrée, quand je rentre C:, le résultat est build, build.xml, manifest.mf, nbproject, src, mais quand je rentre dans C: /, il montre la liste complète des répertoires et fichiers en C.

et étrangement, il ne se produit pas avec le D lecteur et autres lecteurs (ie le résultat est le même pour D:/et D :), que se passe-t-il?

Mise à jour Même chose se produit dans WPF en utilisant C#!

+5

Hehe, Windows est drôle :) –

+0

Quel est le résultat souhaité? Assurez-vous ou supprimez le '/' de votre chemin, en fonction du résultat que vous voulez vraiment. –

+0

Aucun résultat, j'écrivais du code pour la pratique – SpeedBirdNine

Répondre

9

C: signifie "quel que soit le répertoire actuellement sélectionné sur le lecteur C:". Dans votre cas, il s'agit probablement du répertoire à partir duquel votre application s'exécute.

D: est le même que D:/ dans votre cas parce que le répertoire racine est le répertoire de travail en cours dans D:.

+2

Windows suit clairement le CWD sur chaque disque séparément, et en plus de cela suit le lecteur de travail en cours. La combinaison de ces deux est ce que vous connaissez comme CWD sur un * nix. –

+0

@Marko: Oui, je viens de vérifier dans un 'cmd.exe' et remarqué. Merci! –

+0

Oui, c'est bien le répertoire en cours d'exécution du projet car le résultat dans le cas de C: est exactement les fichiers et dossiers dans le dossier du projet! Un commentaire dit que ce comportement ne peut pas être répété sur Windows 7 (ce commentaire a probablement été supprimé), donc il est probablement seulement spécifique à Windows Vista. Je n'ai pas encore vérifié sur une autre version de Windows. – SpeedBirdNine

3

Ce n'est pas vraiment une question java, mais une question Windows/DOS.

L'explication se résume à l'ancienne commande dos pour la commutation des lecteurs. La saisie d'une lettre de lecteur suivie d'un deux-points est une commande pour changer les lecteurs dans DOS, donc la 'commande' C: ne fait rien car votre répertoire de travail est déjà sur le lecteur C. Le 'répertoire' renvoyé par l'interface native au JRE est le même que si vous utilisiez le chemin "", c'est-à-dire votre répertoire de travail. D'autre part, ajoutez une barre oblique et c'est un bon chemin, à la racine de votre lecteur C, par conséquent votre JRE reçoit ce répertoire par l'interface native. Si vous passez à une commande DOS (windows> run> cmd) et que vous tapez C:, vous verrez qu'il accepte la commande mais ne change pas de répertoire, à moins bien sûr que vous soyez actuellement sur un autre disque à ce moment-là.

espérons que cela aide.