Comprobar si una ruta representa un archivo o una carpeta

4 minutos de lectura

avatar de usuario
Egor

Necesito un método válido para comprobar si un String representa una ruta para un archivo o un directorio. ¿Cuáles son los nombres de directorio válidos en Android? Como resulta, los nombres de las carpetas pueden contener '.' chars, entonces, ¿cómo entiende el sistema si hay un archivo o una carpeta?

  • “¿Cómo entiende el sistema si hay un archivo o una carpeta?”: ¿Cómo puede el sistema no ¿comprender? Está ahí en el disco en el sistema de archivos y es uno u otro.

    – usuario207421

    13 oct 2016 a las 10:19

avatar de usuario
baz

Asumiendo path es tuyo 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 File Javadoc


O puedes usar la clase NIO Files y comprueba 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

    8 de octubre de 2012 a las 11:08

  • path en mi ejemplo es el String. ¿Por qué no puedes crear un File ¿instancia? Tenga en cuenta que esto no cambiará nada en el sistema de archivos.

    – Baz

    8 de octubre de 2012 a las 11:09


  • 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

    8 oct 2012 a las 11:19

  • @Egor Bastante difícil de decir, ya que no tengo un dispositivo Android. Tenga en cuenta que root puede ser un archivo. Los archivos no necesariamente tienen un .something extensión.

    – Baz

    8 oct 2012 a las 11:22

  • 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, también devuelve falso. Por lo tanto, isDirectory () devolvería falso si la ruta dada no existe o existe pero no es un directorio … Espero que ayude …

    – Praful Bhatnagar

    9 oct 2012 a las 8:57

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 una nueva File objeto cada vez. ahorra memoria

    – Kervvv

    6 de julio de 2018 a las 2:02

  • No responde a la pregunta formulada. Archivos.isDirectory( ) no acepta una cadena.

    – Gerardo

    6 de febrero de 2019 a las 14:16

  • Empezando desde String? No hay problema… Path path = Paths.get(myString); y ya está listo para ir!

    – Stephan

    20 de marzo a las 16:48

avatar de usuario
Sheng

Cíñete a 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);
}

  • ¿Por qué dar una respuesta en Scala cuando la pregunta pide código Java (ver etiquetas)?

    – Baz

    22 oct 2015 a las 15:58


  • @Baz Porque Scala es covariante de Java… es broma :-D. He actualizado la respuesta.

    – Sheng

    23 de octubre de 2015 a las 14:29

  • Puede crear un directorio temporal, crear allí directorios y archivos. Luego use el código anterior y afirme. Por un lado, use archivos/directorios normales; de lo contrario, use alguna ruta ficticia del elemento que no se crea.

    – Gondrí

    11 oct 2018 a las 10:02

No hay manera de que el sistema le diga si un String representar un file o directorysi se 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.File y java.nio.file.Path

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

if (f.isDirectory()){



  }else if(f.isFile()){



  }

avatar de usuario
Juvanis

Para verificar si una cadena representa una ruta o un archivo programáticamente, 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.

avatar de usuario
Gerardo

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

Para responder a la pregunta directamente.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad