File vs Path¶
En Java, Path
y File
son clases responsables de las operaciones de E/S de ficheros. Realizan las mismas funciones pero pertenecen a diferentes paquetes.
Clase File
¶
Las primeras versiones de Java incluyen el paquete java.io
, que contiene casi todas las clases que podríamos necesitar para realizar operaciones de entrada y salida. La clase File
es una representación abstracta de nombres de rutas de ficheros, directorios y métodos para manipularlos.
Un objeto File
NO es el fichero real. No contiene los datos que contiene el fichero. Es un objeto que contiene métodos que afectan a un archivo o directorio en particular y las funciones para la manipulación real del archivo.
Ejemplo en Windows:
File f = new File("C:\\Users\\temp\\data.txt");
En Linux el carácter separador es /
.
Constructor de File
¶
File(String pathName) //Constructor
pathName
es una secuencia de nombres de directorio seguidos de un nombre de archivo. Los nombres de los directorios están separados por un carácter especial. La sintaxis de los nombres de directorio, separadores y nombres de archivo depende del sistema operativo.
Warning
Construir un objeto de la clase File NO CREA UN FICHERO
public static void main(String[] args) {
File file = new File("archivo.txt");
if (file.exists()) {
System.out.println("Nombre del archivo: " + file.getName());
System.out.println("Ruta absoluta: " + file.getAbsolutePath());
System.out.println("Tamaño del archivo: " + file.length() + " bytes");
} else {
System.out.println("El archivo no existe.");
}
}
Desventajas de la clase File
¶
-
Manejo de errores El problema más común es el manejo deficiente de errores. Muchos métodos no nos dicen ningún detalle sobre el problema encontrado o incluso lanzan excepciones.
-
Compatibilidad con metadatos Los metadatos pueden incluir permisos, propietario del fichero y atributos de seguridad. Debido a esto, la clase
File
no admite enlaces simbólicos en absoluto, y el método rename() no funciona de manera consistente en diferentes plataformas. -
Escalabilidad y rendimiento de métodos También hay un problema de rendimiento porque los métodos de la clase File no escalan. Conduce a problemas con algunos directorios con una gran cantidad de archivos. Enumerar el contenido de un directorio podría provocar un bloqueo, lo que provocaría problemas de recursos de memoria. Debido a algunos de estos inconvenientes, Oracle desarrolló la API NIO2 mejorada.
Clase Path¶
La clase Path
nos permite manipular las rutas de archivos y directorios.
Ejemplos
Crear un objeto Path a partir de una ruta
public static void main(String[] args) {
Path path = Paths.get("ruta/del/archivo.txt");
System.out.println("Ruta: " + path.toString());
}
public static void main(String[] args) {
Path path = Paths.get("ruta/del/archivo.txt");
Path absolutePath = path.toAbsolutePath();
System.out.println("Ruta absoluta: " + absolutePath.toString());
}
public static void main(String[] args) {
Path path = Paths.get("ruta/del/archivo.txt");
System.out.println("Nombre del archivo: " + path.getFileName());
}
public static void main(String[] args) {
Path path = Paths.get("ruta/del/archivo.txt");
Path subPath = path.subpath(0, 2); // Empieza en 0, termina en 2 (exclusivo)
System.out.println("Subruta: " + subPath.toString());
}
public static void main(String[] args) {
Path path = Paths.get("ruta/del/archivo.txt");
boolean isAbsolute = path.isAbsolute();
System.out.println("¿Es absoluta? " + isAbsolute);
}
Path vs File¶
Cuando construimos un objeto File
lo hacemos a través del constructor, mientras que en la clase Path
se usa un método estático.
File file = new File("ada.txt");
Path path = Paths.get("ada.txt");