2012-04-26 24 views
6

właśnie czyta jakąś książkę Java i podejmowania kilka małych programów do praktyki, stworzyłem mały kod, aby uzyskać informacje na temat ścieżki wszedłem, a kod jest:Różnice między C: i 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); 

teraz w dialogu wejściowego, gdy wchodzę C:, wynik jest build, build.xml, manifest.mf, nbproject, src, ale gdy wchodzę C: /, to pokazuje pełną listę katalogów i plików w C

i dziwnie to nie zdarza się z Napęd D i inne napędy (tzn. Wynik jest taki sam dla D:/i D :), co się dzieje, proszę wyjaśnić?

Aktualizacja To samo dzieje się w WPF przy użyciu C#!

+5

Hehe, Windows jest zabawny :) –

+0

Jaki jest pożądany rezultat? Ubezpiecz lub usuń '/' ze swojej ścieżki, w oparciu o wynik, który naprawdę chcesz. –

+0

Brak pożądanego rezultatu, właśnie napisałem kod do praktyki – SpeedBirdNine

Odpowiedz

9

C: oznacza "dowolny katalog aktualnie wybrany na dysku C:". W twoim przypadku jest to prawdopodobnie katalog, z którego twoja aplikacja jest uruchomiona.

D: jest taka sama jak w przypadku D:/ ponieważ katalog główny jest bieżący katalog roboczy w D:.

+2

Windows zdecydowanie śledzi CWD na każdym dysku osobno, a ponadto śledzi bieżący działający dysk. Połączenie tych dwóch jest znane jako CWD na * nix. –

+0

@Marko: Tak, właśnie sprawdziłem 'cmd.exe' i zauważyłem. Dzięki! –

+0

Tak, rzeczywiście jest to katalog bieżący, z którego pochodzi projekt, ponieważ wynik w przypadku C: to dokładnie pliki i foldery w folderze projektu! Jeden komentarz powiedział, że tego zachowania nie można powtórzyć w systemie Windows 7 (ten komentarz prawdopodobnie został usunięty), więc prawdopodobnie jest to tylko specyficzne dla systemu Windows Vista. Nie sprawdziłem jednak żadnej innej wersji systemu Windows. – SpeedBirdNine

3

To naprawdę nie jest pytanie java, ale pytanie Windows/dos.

Wyjaśnienie sprowadza się do starego polecenia dos do przełączania napędów.

Wpisanie litery dysku, a następnie dwukropka to polecenie zmiany napędów w dos, dlatego "komenda" C: nic nie robi, ponieważ katalog roboczy jest już na dysku C. "Katalog" zwracany przez macierzysty interfejs do środowiska JRE jest taki sam, jak w przypadku użycia ścieżki "", tj. Katalogu roboczego.

Z drugiej strony, dodaj ukośnik i jest to właściwa ścieżka do katalogu głównego dysku C, dlatego JRE otrzymuje ten katalog przez macierzysty interfejs.

Jeśli przejdziesz do polecenia DOS (Windows> Uruchom> cmd) i wpisz C: zobaczysz, że akceptuje polecenie, ale nie zmienia katalogu, chyba że obecnie jesteś na innym dysku.

nadzieję, że pomaga.

Powiązane problemy