2012-10-08 33 views
82

Necesito un método válido para comprobar si un String representa 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? Gracias por adelantado.Compruebe si una ruta representa un archivo o una carpeta

+1

"¿Cómo entiende el sistema si hay un archivo o una carpeta": ¿Cómo puede el sistema * no * comprender? Está allí en el disco en el sistema de archivos y es uno o el otro. – EJP

Respuesta

111

Asumiendo path es su 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 puede utilizar la clase NIO Files y comprobar 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 
+0

Como mencioné en mi pregunta, solo tengo instancias de cadenas y ninguna instancia de archivo, y no puedo crearlas. – Egor

+1

'ruta' en mi ejemplo es' Cadena'. ¿Por qué no puedes crear una instancia de 'archivo'? Tenga en cuenta que esto no cambiará nada en el sistema de archivos. – Baz

+0

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

2

Para comprobar si una cadena representa una ruta o un archivo mediante programación, debe utilizar métodos de 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 guardan en una estructura de datos y es administrada por el sistema de archivos.

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

if (f.isDirectory()){ 



    }else if(f.isFile()){ 



    } 
18

Por favor, se adhieren a la API 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); 
} 
+1

¿Por qué dar una respuesta en Scala cuando la pregunta es pedir código Java? tags)? – Baz

+5

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

+0

Eso está bien, pero ¿cómo se puede probar esta unidad? –

26

solución limpia durante su estancia con la API nio:

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

No hay manera para que el sistema dirá si un String representa un file o 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 

Y vemos que tanto en el caso del sistema return false. Esto es cierto para ambos java.io.File y java.nio.file.Path

Cuestiones relacionadas