2009-08-14 10 views

Odpowiedz

10

Ogólnie specyficzna ścieżka może reprezentować zarówno katalog i plik. Dopóki nie istnieje katalog lub plik utworzony na tej ścieżce, pojęcie, że jest ono dla jednego lub drugiego, jest nieprawidłowe.

Istnieje jednak specjalny przypadek. Jeśli ścieżka kończy się separatorem ścieżek ('/' w systemach uniksowych, '\' w systemie Windows i może czymś zupełnie innym w innych systemach), to przynajmniej w systemach uniksowych ścieżka nie może być ścieżką pliku. Nie wiem, czy jest to poprawne dla wszystkich systemów.

0

Najpierw przetestuj plik File.exists().

Pseudo-Code (bo nie rób Java :)):

If File.Exists() 
{ 
    If File.isFile() 
    { 
     bIsFile = true; 
    }elseif File.isFolder() 
    { 
     bIsFolder = true; 
    }else 
    { 
     //Handle error condition here 
    } 
}else 
{ 
    //It does not exist. Handle that here if you care to 
} 
+1

Ale chcę wiedzieć, czy jest to plik lub katalog, czy * nie * istnieje ... –

+1

Jeśli to robi istnieć, to nie jest ani ryba, ani ptactwo - to nic. –

+0

EBGreen, myślę, że właśnie wygrałeś nagrodę za najbardziej skomplikowaną interakcję z buźką/nawiasami! : o) –

3

Nie można

plik musi najpierw istnieje, aby wiedzieć, co to JEST (rozumiem, że jeśli plik nie istnieje to jest jeszcze nic)

Javadoc mówi w obu przypadki:

prawdziwe wtedy i tylko wtedy, gdy plik oznaczony tej abstrakcyjnej ścieżki istnieje i [...]

Plik, który nie istnieje, może być jednocześnie potencjalnie.

2

Myślę, że odpowiedź brzmi, że nie można. Jednym z powodów jest to, że po prostu nie istnieje. Pozostały powód ma związek z niezależnością systemu od Javy. W zależności od systemu operacyjnego, z którego korzystasz, nie ma różnicy między plikiem a katalogiem. Na przykład w systemie UNIX wszystko jest plikiem. Rury, katalogi, linki - wszystkie są plikami technicznymi.

W obecnej wersji abstrakcyjna nazwa ścieżki, do której odwołuje się obiekt File, może być jedna - dopóki nie zostanie wykonana mkdir() lub createNewFile().

5

Twoje pytanie jest jak pytanie to:

„? Jak mogę sprawdzić, czy to pole zawiera kota lub psa, gdy jest pusta”

Na pierwszy rzut oka to pytanie jest bezsensowne, podobnie jak twoje. Jeśli plik jest ścieżką, odnosi się do nieistniejącego obiektu systemu plików (tj. Do "nic"), a następnie pyta, czy to "nic" >> to plik lub katalog jest bez znaczenia. Oczywiście nie jest.

Konkretnie, w dowolnym momencie w czasie wszystkich następujących orzeczników przytrzymanie:

file.exists() == false IMPLIES 
     file.isDirectory() == false AND file.isFile() == false 

file.isDirectory() == true OR file.isFile() == true IMPLIES 
     file.exists() == true 

file.isDirectory() == true IMPLIES 
     file.isFile() == false 

file.isFile() == true IMPLIES 
     file.isDirectory() == false 
Powiązane problemy