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?


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

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)

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);
}

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()){



  }

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


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.


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();
}

Para responder la pregunta directamente.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.