1. Pathclase

Si desea escribir un programa que haga algo con archivos en el disco, eso es bastante fácil. Java tiene muchas clases que lo ayudan a trabajar tanto con los archivos como con su contenido.

Las primeras versiones de Java usaban clases como Filey FileInputStreampara trabajar con archivos. Sin embargo, la Fileclase ahora está en desuso y no se recomienda su uso. Por supuesto, aún puede encontrarlo en el código, los parámetros del método o los constructores de clases.

Desde el principio, comenzaremos a aprender cómo trabajar con archivos usando la Pathclase. Pathes la clase que reemplazó a File. Es más seguro y más eficiente.

Pathclase

Técnicamente, Pathno es una clase, es una interfaz. Esto se hace para permitir la escritura de un descendiente de la Pathclase para cada sistema operativo (y sistema de archivos).

Windows tiene un estándar para escribir rutas de archivos y Linux tiene otro. Por supuesto, hay muchos otros sistemas operativos en el mundo y cada uno tiene su propio estándar.

Es por eso que la Pathinterfaz se usa en todas partes en los métodos que trabajan con archivos, aunque en realidad el trabajo ocurre a través de sus clases descendientes: WindowsPath, UnixPath, ...

Creando un Pathobjeto

Para crear un Pathobjeto (que en realidad será un objeto de la WindowsPathclase descendiente), debe usar una declaración como esta:

Path name = Path.of(path);

Donde namees el nombre de una Pathvariable y pathes la ruta al archivo (o directorio) incluido el nombre del archivo (o directorio). Y ofes un método estático de la Pathclase.

El of()método se utiliza para crear WindowsPathobjetos si el programa se ejecuta en Windows. Si el programa se ejecuta en Linux, se UnixPathcrean objetos. No puede crear un Pathobjeto usando código como .new Path()

Ejemplos:

Código Nota
Path file = Path.of("c:\\projects\\note.txt");
Ruta al archivo
Path directory = Path.of("c:\\projects\\");
Ruta al directorio

El archivo (o directorio) no necesita existir para que Pathexista un objeto válido. Tal vez solo desee crear un archivo... Un Pathobjeto es como una mejora String: no está vinculado a un archivo específico en el disco, solo almacena una determinada ruta en el disco. Eso es todo.


2. Métodos del Pathtipo

La Pathinterfaz tiene bastantes métodos interesantes. Los más interesantes se presentan en la siguiente tabla.

Método Descripción
Path getParent()
Devuelve el directorio principal
Path getFileName()
Devuelve el nombre del archivo sin el directorio.
Path getRoot()
Devuelve el directorio raíz de una ruta
boolean isAbsolute()
Comprueba si la ruta actual es absoluta
Path toAbsolutePath()
Convierte la ruta en absoluta
Path normalize()
Elimina los comodines en un nombre de directorio.
Path resolve(Path other)
Construye una nueva ruta absoluta a partir de rutas absolutas y relativas.
Path relativize(Path other)
Obtiene una ruta relativa de dos rutas absolutas.
boolean startsWith(Path other)
Comprueba si la ruta actual comienza con una ruta dada
boolean endsWith(Path other)
Comprueba si la ruta actual termina con una ruta dada
int getNameCount()
Divide la ruta en partes utilizando /como delimitador.
Devuelve el número de partes.
Path getName(int index)
Divide la ruta en partes utilizando /como delimitador.
Devuelve una parte por su índice.
Path subpath(int beginIndex, int endIndex)
Divide la ruta en partes utilizando /como delimitador.
Devuelve el subcamino que corresponde al intervalo dado.
File toFile()
Convierte un objeto en un objeto PathobsoletoFile
URI toUri()
Convierte un Pathobjeto en un URIobjeto.

A continuación se muestra una breve descripción de los métodos existentes.


3. Dividir un camino en partes

El getParent()método devuelve la ruta que apunta al directorio principal de la ruta actual. Independientemente de si esta ruta es un directorio o un archivo:

Código Valor
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).getParent();
"c:\\windows\\projects\\"
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getParent();
"c:\\windows\\"
String str = "c:\\";
Path path = Path.of(str).getParent();
null

El getFileName()método devuelve un solo nombre de archivo (o directorio), lo que viene después del último delimitador:

Código Valor
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).getFileName();
"note.txt"
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getFileName();
"projects"
String str = "c:\\";
Path path = Path.of(str).getFileName();
null

El getRoot()método devuelve la ruta al directorio raíz:

Código Valor
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getRoot();
"c:\\"


4. Caminos absolutos y relativos

Hay dos tipos de caminos: absolutos y relativos. Una ruta absoluta comienza desde el directorio raíz. Para Windows, esta podría ser la c:\carpeta; para Linux — el /directorio

Una ruta relativa es significativa en relación con algún directorio. Es decir, es como el final del camino, pero sin el principio. Puede convertir una ruta relativa en una ruta absoluta y viceversa

boolean isAbsolute()método

El método comprueba si la ruta actual es absoluta

Código Valor
String str = "c:\\windows\\projects\\note.txt";
boolean abs = Path.of(str).isAbsolute();
true
String str = "src\\com\\codegym\\Main.java";
boolean abs = Path.of(str).isAbsolute();
false

Path toAbsolutePath()método

Convierte la ruta en absoluta. Si es necesario, agrega el directorio de trabajo actual:

Código Valor
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).toAbsolutePath();
"c:\\windows\\projects\\note.txt"
String str = "src\\com\\codegym\\Main.java";
Path path = Path.of(str).toAbsolutePath();
"d:\\work\\src\\com\\codegym\\Main.java"

Path normalize()método

En la ruta, en lugar de un nombre de directorio, puede escribir "..", lo que significa retroceder un directorio . La normalización elimina estas cosas. Ejemplos:

Código Valor
String str = "c:\\windows\\..\\projects\\note.txt";
Path path = Path.of(str).normalize();
"c:\\projects\\note.txt"
String str = "src\\com\\codegym\\..\\Main.java";
Path path = Path.of(str).normalize();
"src\\com\\Main.java"

Path relativize(Path other)método

El relativize()método le permite construir las "diferencias entre caminos": un camino relativo a otro

Código Valor
Path path1 = Path.of("c:\\windows\\projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path2.relativize(path1);
"projects\\note.txt"
Path path1 = Path.of("c:\\windows\\projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path1.relativize(path2);
"..\\.."
Path path1 = Path.of("c:\\aaa\\bbb\\1.txt");
Path path2 = Path.of("d:\\zzz\\y.jpg");
Path result = path1.relativize(path2);
Argumento de excepción ilegal:
las dos rutas tienen una "raíz" diferente (discos diferentes)

Path resolve(Path other)método

El resolve()método hace lo contrario de relativize(): construye una nueva ruta absoluta a partir de una ruta absoluta y otra relativa.

Código Valor
Path path1 = Path.of("projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path1.resolve(path2);
"c:\\windows"
Path path1 = Path.of("projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path2.resolve(path1);
"c:\\windows\\projects\\note.txt"

toFile()método

El método devuelve un Fileobjeto en desuso que almacena la misma ruta de archivo que el Pathobjeto.

toURI()método

El método convierte la ruta a un URI estándar y devuelve un objeto que contiene la ruta al archivo:

Ruta al archivo URI al archivo
c:\windows\projects\note.txt
file:///c:/windows/projects/note.txt