Controlla se un percorso rappresenta un file o una cartella


141

Ho bisogno di un metodo valido per verificare se a Stringrappresenta un percorso per un file o una directory. Quali sono i nomi di directory validi in Android? Come viene fuori, i nomi delle cartelle possono contenere '.'caratteri, quindi come fa il sistema a capire se c'è un file o una cartella?


2
"Come fa il sistema a capire se c'è un file o una cartella": Come può il sistema non capire? È lì sul disco nel file system ed è l'uno o l'altro.
Marchese di Lorne,

Risposte:


203

Supponendo che pathsia tuo 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

Vedi FileJavadoc


Oppure puoi usare la classe NIO Filese controllare cose come questa:

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

Come ho detto nella mia domanda, ho solo stringhe e nessuna istanza di file e non riesco a crearle.
Egor,

1
pathnel mio esempio è il String. Perché non riesci a creare Fileun'istanza? Nota che questo non cambierà nulla sul filesystem.
Baz,

Ecco un esempio concreto, sto cercando di creare un file usando il seguente percorso: / mnt / sdcard / arc / root, e per isDirectory () restituisce false. Qual è il problema qui?
Egor,

@Egor Abbastanza difficile da dire, dal momento che non ho un dispositivo Android. Si noti che rootpotrebbe essere un file. I file non hanno necessariamente .somethingun'estensione.
Baz,

10
Il metodo isDirectory () restituisce true solo se il file esiste ed è una directory. Se il file indicato nel percorso non esiste, restituisce anche false. Quindi isDirectory () restituirebbe false se il percorso indicato non esiste o esiste ma non è una directory ... Spero che aiuti ..
Praful Bhatnagar,

50

Soluzione pulita rimanendo con l'API nio:

Files.isDirectory(path)
Files.isRegularFile(path)

Questa è la risposta migliore se si passa in rassegna un elenco di directory. Qui stai usando una classe statica per eseguire questi controlli, piuttosto che creare un nuovo Fileoggetto ogni volta. Salva memoria
Kervvv

2
Non risponde alla domanda posta. Files.isDirectory () non accetta una stringa.
Gerardw,

21

Attenersi all'API nio per eseguire questi controlli

import java.nio.file.*;

static Boolean isDir(Path path) {
  if (path == null || !Files.exists(path)) return false;
  else return Files.isDirectory(path);
}

2
Perché dare una risposta in Scala quando la domanda richiede codice Java (vedi tag)?
Baz,

6
@Baz Perché Scala è covariante a Java ... sto scherzando MrGreen. Ho aggiornato la risposta.
Sheng,

È possibile creare una directory temporanea, creare lì directory e file. Quindi utilizzare il codice sopra e affermare. In una mano usa file / directory normali, altrimenti usa un percorso fittizio dell'elemento che non è stato creato.
Gondri,

4
String path = "Your_Path";
File f = new File(path);

if (f.isDirectory()){



  }else if(f.isFile()){



  }

3

Non c'è modo per il sistema di dirti se Stringrappresenta un fileo directory, se non esiste nel file system. Per esempio:

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

E per il seguente esempio:

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

Quindi vediamo che in entrambi i casi il sistema restituisce false. Questo è vero per entrambi java.io.Fileejava.nio.file.Path


2

Per verificare se una stringa rappresenta un percorso o un file a livello di codice, è necessario utilizzare metodi API come isFile(), isDirectory().

Come fa il sistema a capire se esiste un file o una cartella?

Suppongo che le voci di file e cartelle siano mantenute in una struttura di dati ed è gestita dal file system.


0
   private static boolean isValidFolderPath(String path) {
    File file = new File(path);
    if (!file.exists()) {
      return file.mkdirs();
    }
    return true;
  }

0
public static boolean isDirectory(String path) {
    return path !=null && new File(path).isDirectory();
}

Per rispondere direttamente alla domanda.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.