Wie kann ich herausfinden, ob eine Datei eine Datei oder ein Verzeichnis ist, wenn es nicht existiert?

8

File.isFile() und File.isDirectory() geben beide nicht false zurück, wenn File nicht der angegebene Typ ist, sondern auch wenn File selbst nicht im Dateisystem vorhanden ist. Wie kann ich feststellen, ob das File eine Datei oder ein Verzeichnis darstellt, wenn es nicht existiert?

    
Amanda S 14.08.2009, 18:27
quelle

5 Antworten

10

Im Allgemeinen kann ein bestimmter Pfad sowohl ein Verzeichnis als auch eine Datei darstellen. Solange auf diesem Pfad weder ein Verzeichnis noch eine Datei erstellt wird, ist die Vorstellung, dass es für das eine oder das andere ist, ungültig.

Es gibt jedoch einen Sonderfall. Wenn der Pfad mit einem Pfadtrennzeichen endet ('/' auf Unix-ähnlichen Systemen, '\' auf Windows und vielleicht etwas völlig anderem auf anderen Systemen), dann kann der Pfad zumindest auf Unix-ähnlichen Systemen nicht der einer Datei sein. Ich weiß nicht, ob das für alle Systeme gilt.

    
Mikael Auno 14.08.2009, 18:34
quelle
5

Ihre Frage ist wie die Frage:

  

"Wie kann ich feststellen, ob diese Box eine Katze oder einen Hund enthält, wenn sie leer ist?"

Auf den ersten Blick ist diese Frage unsinnig und so auch Ihre. Wenn eine Datei ein Pfad ist, bezieht er sich auf ein nicht existierendes Dateisystemobjekt (d. H. Auf "nichts"), und fragt dann, ob dieses "nichts" & lt; & lt; & lt; & lt; & lt; & lt; Eine Datei oder ein Verzeichnis ist bedeutungslos. Es ist offensichtlich weder.

Insbesondere gilt zu jedem beliebigen Zeitpunkt für alle folgenden Prädikate:

%Vor%     
Stephen C 15.08.2009 04:38
quelle
3

Sie können nicht

Die Datei muss zuerst existieren, um zu wissen, was sie IST (Ich verstehe, dass, wenn die Datei nicht existiert, es nichts ist)

Der Javadoc sagt in beiden Fällen:

  

true, wenn und nur wenn die Datei mit diesem abstrakten Pfadnamen existiert und [...]

Eine Datei, die noch nicht existiert, könnte beides sein.

    
OscarRyz 14.08.2009 18:34
quelle
2

Ich denke, die Antwort ist, dass Sie es nicht können. Ein Teil des Grundes ist, dass es einfach nicht existiert. Der Rest hat mit der Systemunabhängigkeit von Java zu tun. Abhängig von dem Betriebssystem, auf dem Sie arbeiten, gibt es keinen Unterschied zwischen einer Datei und einem Verzeichnis. In UNIX zum Beispiel ist alles eine Datei. Pipes, Verzeichnisse, Links - alles technische Dateien.

Der abstrakte Pfadname, auf den das File-Objekt verweist, kann unverändert sein, bis Sie entweder mkdir() oder createNewFile() darauf ausführen.

    
dustmachine 14.08.2009 18:35
quelle
0

Testen Sie File.exists () zuerst.

Pseudocode (weil ich Java nicht mache :)):

%Vor%     
EBGreen 14.08.2009 18:28
quelle

Tags und Links