Compruebe si una ruta representa un archivo o una carpeta

141

Necesito un método válido para verificar si a Stringrepresenta una ruta para el archivo o un directorio. ¿Cuáles son los nombres de directorio válidos en Android? A medida que sale, los nombres de las carpetas pueden contener '.'caracteres, entonces, ¿cómo entiende el sistema si hay un archivo o una carpeta?

Egor
fuente
2
"¿Cómo entiende el sistema si hay un archivo o una carpeta": ¿Cómo puede el sistema no entender? Está allí en el disco en el sistema de archivos y es uno u otro.
Marqués de Lorne

Respuestas:

203

Asumir pathes tu 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

Ver FileJavadoc


O puede usar la clase NIO Filesy verificar cosas como esta:

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
fuente
Como mencioné en mi pregunta, solo tengo cadenas y ninguna instancia de archivo, y no puedo crearlas.
Egor
1
pathen mi ejemplo es el String. ¿Por qué no puedes crear una Fileinstancia? Tenga en cuenta que esto no cambiará nada en el sistema de archivos.
Baz
Aquí hay un ejemplo concreto, estoy tratando de crear un archivo usando la siguiente ruta: / mnt / sdcard / arc / root, y para isDirectory () devuelve falso. ¿Cuál es el problema aquí?
Egor
@Egor Muy difícil de decir, ya que no tengo un dispositivo Android. Tenga en cuenta que rootpuede ser un archivo. Los archivos no necesariamente tienen una .somethingextensión.
Baz
10
El método isDirectory () devolvería verdadero solo si el archivo existe y es un directorio. Si el archivo dado en la ruta no existe, entonces también devuelve falso. Por lo tanto, isDirectory () podría devolver false si la ruta dada no existe o existe pero no es un directorio ... Espero que ayude ..
Praful Bhatnagar
50

Solución limpia mientras permanece con la API de nio:

Files.isDirectory(path)
Files.isRegularFile(path)
pgsandstrom
fuente
Esta es la mejor respuesta si está recorriendo una lista de directorios. Aquí está utilizando una clase estática para ejecutar estas comprobaciones, en lugar de crear un nuevo Fileobjeto cada vez. Ahorra memoria
Kervvv
2
No responde la pregunta formulada. Files.isDirectory () no acepta una cadena.
gerardw
21

Siga la API de nio para realizar estas comprobaciones

import java.nio.file.*;

static Boolean isDir(Path path) {
  if (path == null || !Files.exists(path)) return false;
  else return Files.isDirectory(path);
}
Sheng
fuente
2
¿Por qué dar una respuesta en Scala cuando la pregunta está pidiendo código Java (ver etiquetas)?
Baz
66
@Baz Porque Scala es covariante para Java ... es broma :-D. He actualizado la respuesta.
Sheng
Puede crear un directorio temporal, crear allí directorios y archivos. Luego use el código anterior y afirme. Por un lado, use archivos / directorios regulares; de lo contrario, use alguna ruta ficticia del elemento que no se haya creado.
Gondri
4
String path = "Your_Path";
File f = new File(path);

if (f.isDirectory()){



  }else if(f.isFile()){



  }
Kumar Vivek Mitra
fuente
3

No hay forma de que el sistema le diga si Stringrepresenta a fileo directory, si no existe en el sistema de archivos. Por ejemplo:

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

Y para el siguiente ejemplo:

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

Entonces vemos que en ambos casos el sistema devuelve falso. Esto es cierto para ambos java.io.Fileyjava.nio.file.Path

Emdadul Sawon
fuente
2

Para verificar si una cadena representa una ruta o un archivo mediante programación, debe usar métodos API como isFile(), isDirectory().

¿Cómo entiende el sistema si hay un archivo o una carpeta?

Supongo que las entradas de archivos y carpetas se mantienen en una estructura de datos y son administradas por el sistema de archivos.

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

Para responder la pregunta directamente.

gerardw
fuente