Todo lo que se puede preguntar sobre un archivo está en dos sitios: en el Path, que son preguntas sobre el nombre, y en Files, que son preguntas sobre el disco. Saber cuál es cuál evita sorpresas.
También te puede interesar
Lo que sabe el Path, sin tocar el disco
Path ruta = Path.of("salida", "notas.txt");
IO.println("nombre : " + ruta.getFileName());
IO.println("carpeta : " + ruta.getParent());
IO.println("absoluta : " + ruta.toAbsolutePath());salidanombre : notas.txt carpeta : salida absoluta : /trabajo/l2/salida/notas.txt
Path es solo una ruta, como una cadena bien formada: se puede construir para un archivo que no existe y getParent() funciona igual. Para saber algo del archivo de verdad hay que preguntarle a Files, y ahí sí se toca el disco.Lo que hay que preguntarle al disco
IO.println("existe : " + Files.exists(ruta));
IO.println("es archivo : " + Files.isRegularFile(ruta));
IO.println("es carpeta : " + Files.isDirectory(ruta));
IO.println("tamaño : " + Files.size(ruta) + " bytes");
IO.println("legible : " + Files.isReadable(ruta));
IO.println("escribible : " + Files.isWritable(ruta));
IO.println("oculto : " + Files.isHidden(ruta));
IO.println("tipo : " + Files.probeContentType(ruta));salidaexiste : true es archivo : true es carpeta : false tamaño : 6 bytes legible : true escribible : true oculto : false tipo : text/plain
probeContentType devuelve el tipo MIME, que en Linux sale de la base de datos del sistema y puede ser null si no lo reconoce: conviene comprobarlo antes de usarlo.
Las fechas, todas de una vez
BasicFileAttributes a = Files.readAttributes(ruta, BasicFileAttributes.class);
var f = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss").withZone(ZoneId.systemDefault());
IO.println("creado : " + f.format(a.creationTime().toInstant()));
IO.println("modificado : " + f.format(a.lastModifiedTime().toInstant()));salidacreado : 08/10/2026 06:41:01 modificado : 08/10/2026 06:41:01
Files.isDirectory, cada Files.size es una llamada al sistema operativo. readAttributes los trae todos en una, y el objeto que devuelve tiene además size(), isDirectory() y isRegularFile(). Recorriendo una carpeta con miles de archivos, la diferencia se nota.Permisos de Unix
var permisos = Files.getPosixFilePermissions(ruta); IO.println(PosixFilePermissions.toString(permisos));
salidarw-r--r--
Solo en sistemas POSIX. En Windows lanza UnsupportedOperationException, así que si el programa tiene que correr en los dos sitios conviene preguntar antes con FileSystems.getDefault().supportedFileAttributeViews().contains("posix").
| Quieres saber… | Pregunta a |
|---|---|
| El nombre o la carpeta | ruta.getFileName(), ruta.getParent() |
| Si existe | Files.exists(ruta) |
| Cuánto ocupa | Files.size(ruta) |
| Cuándo se modificó | Files.getLastModifiedTime(ruta) |
| Varias cosas a la vez | Files.readAttributes(ruta, BasicFileAttributes.class) |
| El tipo de contenido | Files.probeContentType(ruta) |
Más información en inglés: Get information from a file in Java.
Todo el código se compiló y se ejecutó con Java 25 LTS en un contenedor limpio antes de publicar esta página; las salidas están copiadas de esa ejecución.