Überprüfen Sie, ob ein Pfad eine Datei oder einen Ordner darstellt

141

Ich benötige eine gültige Methode, um zu überprüfen, ob a Stringeinen Pfad für eine Datei oder ein Verzeichnis darstellt. Was sind gültige Verzeichnisnamen in Android? Ordnernamen können '.'Zeichen enthalten. Wie versteht das System also, ob es eine Datei oder einen Ordner gibt?

Egor
quelle
2
"Wie versteht das System, ob es eine Datei oder einen Ordner gibt ? ": Wie kann das System nicht verstehen? Es befindet sich auf der Festplatte im Dateisystem und ist das eine oder andere.
Marquis von Lorne

Antworten:

203

Vorausgesetzt, es pathist dein String.

File file = new File(path);

boolean exists =      file.exists();      // Check if the file exists
boolean isDirectory = file.isDirectory(); // Check if it's a directory
boolean isFile =      file.isFile();      // Check if it's a regular file

Siehe FileJavadoc


Oder Sie können die NIO-Klasse verwenden Filesund Folgendes überprüfen:

Path file = new File(path).toPath();

boolean exists =      Files.exists(file);        // Check if the file exists
boolean isDirectory = Files.isDirectory(file);   // Check if it's a directory
boolean isFile =      Files.isRegularFile(file); // Check if it's a regular file
Baz
quelle
Wie ich in meiner Frage erwähnt habe, habe ich nur Strings und keine File-Instanzen und kann sie nicht erstellen.
Egor
1
pathIn meinem Beispiel ist das String. Warum können Sie keine FileInstanz erstellen ? Beachten Sie, dass dies nichts am Dateisystem ändert.
Baz
Hier ist ein konkretes Beispiel: Ich versuche, eine Datei mit dem folgenden Pfad zu erstellen: / mnt / sdcard / arc / root, und für isDirectory () wird false zurückgegeben. Was ist das Problem hier?
Egor
@Egor Ziemlich schwer zu sagen, da ich kein Android-Gerät habe. Beachten Sie, dass rootdies eine Datei sein kann. Dateien haben nicht unbedingt eine .somethingErweiterung.
Baz
10
Die Methode isDirectory () würde nur dann true zurückgeben, wenn die Datei vorhanden ist und es sich um ein Verzeichnis handelt. Wenn die im Pfad angegebene Datei nicht vorhanden ist, wird auch false zurückgegeben. Also ist esDirectory () würde false zurückgeben, wenn der angegebene Pfad nicht existiert oder existiert, aber es ist kein Verzeichnis ... Hoffe, das hilft ..
Praful Bhatnagar
50

Saubere Lösung bei gleichzeitiger Verwendung der nio API:

Files.isDirectory(path)
Files.isRegularFile(path)
pgsandstrom
quelle
Dies ist die bessere Antwort, wenn Sie eine Liste von Verzeichnissen durchlaufen. Hier verwenden Sie eine statische Klasse, um diese Überprüfungen auszuführen, anstatt Filejedes Mal ein neues Objekt zu erstellen .
Spart
2
Beantwortet die gestellte Frage nicht. Files.isDirectory () akzeptiert keine Zeichenfolge .
Gerardw
21

Bitte halten Sie sich an die nio API, um diese Überprüfungen durchzuführen

import java.nio.file.*;

static Boolean isDir(Path path) {
  if (path == null || !Files.exists(path)) return false;
  else return Files.isDirectory(path);
}
Sheng
quelle
2
Warum in Scala eine Antwort geben, wenn die Frage nach Java-Code fragt (siehe Tags)?
Baz
6
@Baz Weil Scala zu Java kovariant ist ... nur ein Scherz :-D. Ich habe die Antwort aktualisiert.
Sheng
Sie können ein temporäres Verzeichnis erstellen, dort Verzeichnisse und Dateien erstellen. Verwenden Sie dann den obigen Code und bestätigen Sie. Verwenden Sie einerseits reguläre Dateien / Verzeichnisse, andernfalls verwenden Sie einen Dummy-Pfad des Elements, der nicht erstellt wurde.
Gondri
4
String path = "Your_Path";
File f = new File(path);

if (f.isDirectory()){



  }else if(f.isFile()){



  }
Kumar Vivek Mitra
quelle
3

Das System kann Ihnen nicht mitteilen, ob a Stringein fileoder darstellt directory, wenn es im Dateisystem nicht vorhanden ist. Beispielsweise:

Path path = Paths.get("/some/path/to/dir");
System.out.println(Files.isDirectory(path)); // return false
System.out.println(Files.isRegularFile(path)); // return false

Und für das folgende Beispiel:

Path path = Paths.get("/some/path/to/dir/file.txt");
System.out.println(Files.isDirectory(path));  //return false
System.out.println(Files.isRegularFile(path));  // return false

Wir sehen also, dass das System in beiden Fällen false zurückgibt. Dies gilt sowohl für java.io.Fileals auchjava.nio.file.Path

Emdadul Sawon
quelle
2

Um zu überprüfen, ob eine Zeichenfolge programmgesteuert einen Pfad oder eine Datei darstellt, sollten Sie API-Methoden wie z isFile(), isDirectory().

Wie versteht das System, ob es eine Datei oder einen Ordner gibt?

Ich denke, die Datei- und Ordnereinträge werden in einer Datenstruktur gespeichert und vom Dateisystem verwaltet.

Juvanis
quelle
0
   private static boolean isValidFolderPath(String path) {
    File file = new File(path);
    if (!file.exists()) {
      return file.mkdirs();
    }
    return true;
  }
Kaweesi Joseph
quelle
0
public static boolean isDirectory(String path) {
    return path !=null && new File(path).isDirectory();
}

Um die Frage direkt zu beantworten.

gerardw
quelle