Vérifiez si un chemin représente un fichier ou un dossier

141

J'ai besoin d'une méthode valide pour vérifier si a Stringreprésente un chemin pour un fichier ou un répertoire. Quels sont les noms de répertoire valides dans Android? À leur sortie, les noms de dossier peuvent contenir des '.'caractères, alors comment le système comprend-il s'il existe un fichier ou un dossier?

Egor
la source
2
"Comment le système comprend-il s'il existe un fichier ou un dossier": Comment le système peut-il ne pas comprendre? C'est là sur le disque dans le système de fichiers et c'est l'un ou l'autre.
Marquis de Lorne

Réponses:

203

En supposant que pathc'est votre 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

Voir FileJavadoc


Ou vous pouvez utiliser la classe NIO Fileset vérifier des choses comme ceci:

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
la source
Comme je l'ai mentionné dans ma question, je n'ai que des chaînes et aucune instance de fichier, et je ne peux pas les créer.
Egor
1
pathdans mon exemple est le String. Pourquoi ne pouvez-vous pas créer une Fileinstance? Notez que cela ne changera rien sur le système de fichiers.
Baz
Voici un exemple concret, j'essaie de créer un fichier en utilisant le chemin suivant: / mnt / sdcard / arc / root, et pour isDirectory (), il renvoie false. Quel est le problème ici?
Egor
@Egor Assez difficile à dire, car je n'ai pas d'appareil Android. Notez que cela rootpeut être un fichier. Les fichiers n'ont pas nécessairement d' .somethingextension.
Baz
10
La méthode isDirectory () ne retournerait true que si le fichier existe et qu'il s'agit d'un répertoire. Si le fichier indiqué dans le chemin n'existe pas, il renvoie également false. Donc, isDirectory () renverrait false si le chemin donné n'existe pas ou il existe mais ce n'est pas un répertoire ... J'espère que cela aide ..
Praful Bhatnagar
50

Solution propre tout en restant avec l'API nio:

Files.isDirectory(path)
Files.isRegularFile(path)
pgsandstrom
la source
C'est la meilleure réponse si vous parcourez une liste de répertoires. Ici, vous utilisez une classe statique pour exécuter ces vérifications, plutôt que de créer un nouvel Fileobjet à chaque fois. Sauvegarde de la mémoire
Kervvv
2
Ne répond pas à la question posée. Files.isDirectory () n'accepte pas de chaîne.
gerardw
21

Veuillez vous en tenir à l'API nio pour effectuer ces vérifications

import java.nio.file.*;

static Boolean isDir(Path path) {
  if (path == null || !Files.exists(path)) return false;
  else return Files.isDirectory(path);
}
Sheng
la source
2
Pourquoi donner une réponse dans Scala lorsque la question demande du code Java (voir les balises)?
Baz
6
@Baz Parce que Scala est covariant avec Java ... je plaisante :-D. J'ai mis à jour la réponse.
Sheng
Vous pouvez créer un répertoire temporaire, y créer des répertoires et des fichiers. Ensuite, utilisez le code ci-dessus et affirmez. D'une part, utilisez des fichiers / répertoires normaux, sinon utilisez un chemin factice d'élément qui n'est pas créé.
Gondri
4
String path = "Your_Path";
File f = new File(path);

if (f.isDirectory()){



  }else if(f.isFile()){



  }
Kumar Vivek Mitra
la source
3

Il n'y a aucun moyen pour le système de vous dire si a Stringreprésente un fileou directory, s'il n'existe pas dans le système de fichiers. Par exemple:

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

Et pour l'exemple suivant:

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

Nous voyons donc que dans les deux cas, le système renvoie false. Cela est vrai pour les deux java.io.Fileetjava.nio.file.Path

Emdadul Sawon
la source
2

Pour vérifier si une chaîne représente un chemin ou un fichier par programme, vous devez utiliser des méthodes API telles que isFile(), isDirectory().

Comment le système comprend-il s'il existe un fichier ou un dossier?

Je suppose que les entrées de fichiers et de dossiers sont conservées dans une structure de données et gérées par le système de fichiers.

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

Pour répondre directement à la question.

Gérardw
la source