2012-04-26 3 views
6

Я просто читал некоторые Java книгу и сделать несколько небольших программ для практики, я создал небольшой код, чтобы получить информацию о пути я вошел, а код:разница между C: и 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); 

Теперь в диалоге ввода, когда я вхожу C:, результат build, build.xml, manifest.mf, nbproject, src, но когда я вхожу C: /, он показывает полный список каталогов и файлов в С.

и странно это не происходит с D и другие диски (т. Е. Результат такой же для D:/и D :), что происходит, объясните, пожалуйста, объясните?

Обновление То же самое происходит в WPF с использованием C#!

+5

Хехе, Windows смешно :) –

+0

Каков желаемый результат? Завершите или удалите '/' с вашего пути, на основе результата, который вы действительно хотите. –

+0

Нет желаемого результата, я просто писал код для практики – SpeedBirdNine

ответ

9

C: означает «любая директория в настоящее время выбрана на диске C:». В вашем случае это, вероятно, каталог, из которого выполняется ваше приложение.

D: такого же, как D:/ в вашем случае, поскольку корневой каталог является текущим рабочим каталогом в D:.

+2

Windows определенно отслеживает CWD на каждом диске отдельно, и в дополнение к этому отслеживает текущий рабочий диск. Комбинация этих двух - это то, что вы знаете как CWD на * nix. –

+0

@Marko: Да, я только что зарегистрировался в 'cmd.exe' и заметил. Благодаря! –

+0

Да, это действительно текущий каталог, из которого запущен проект, потому что результат в случае C: это именно файлы и папки в папке проекта! Один комментарий сказал, что это поведение не может быть повторено в Windows 7 (этот комментарий, вероятно, был удален), поэтому, вероятно, он специфичен только для Windows Vista. Однако не проверены ни на какой другой версии Windows. – SpeedBirdNine

3

Это не вопрос Java, но вопрос windows/dos.

Объяснение сводится к старой команде dos для переключения приводов.

Ввод буквы диска, сопровождаемой двоеточием, - это команда изменения дисков в dos, поэтому команда «C:» ничего не делает, поскольку ваш рабочий каталог уже находится на диске C. «Каталог», возвращаемый собственным интерфейсом JRE, такой же, как если бы вы использовали путь «», то есть ваш рабочий каталог.

С другой стороны, добавьте косую черту, и это правильный путь к корню вашего диска C, поэтому ваша JRE предоставляется этой директорией по собственному интерфейсу.

Если вы перейдете к команде dos (windows> run> cmd) и введите C:, вы увидите, что он принимает команду, но не меняет каталог, если, конечно, вы не находитесь на другом диске в то время.

надеюсь, что это поможет.

Смежные вопросы