Java NIO: ruta
Como sugiere el nombre, Path es la ubicación particular de una entidad, como un archivo o un directorio en un sistema de archivos, de modo que uno pueda buscarlo y acceder a él en esa ubicación en particular.
Técnicamente en términos de Java, Path es una interfaz que se introduce en el paquete de archivos Java NIO durante la versión 7 de Java, y es la representación de la ubicación en un sistema de archivos particular.Como la interfaz de ruta está en el paquete Java NIO, obtiene su nombre calificado como java .nio.file.Path.
En general, la ruta de una entidad podría ser de dos tipos, una es la ruta absoluta y la otra es la ruta relativa Como el nombre de ambas rutas sugiere que la ruta absoluta es la dirección de ubicación desde la raíz hasta la entidad donde se ubica, mientras que la ruta relativa es la dirección de ubicación que es relativa a alguna otra ruta. Ruta usa delimitadores en su definición como "\" para Windows y "/" para sistemas operativos Unix.
Para obtener la instancia de Path podemos usar el método estático de la clase java.nio.file.Paths get()Este método convierte una cadena de ruta, o una secuencia de cadenas que cuando se unen forman una cadena de ruta, en una instancia de Path. Este método también arroja una InvalidPathException en tiempo de ejecución si los argumentos pasados contienen caracteres ilegales.
Como se mencionó anteriormente, la ruta absoluta se recupera pasando el elemento raíz y la lista completa de directorios requerida para ubicar el archivo, mientras que la ruta relativa se puede recuperar combinando la ruta base con la ruta relativa.La recuperación de ambas rutas se ilustraría en el siguiente ejemplo
Ejemplo
package com.java.nio;
import java.io.IOException;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.file.FileSystem;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
public class PathDemo {
public static void main(String[] args) throws IOException {
Path relative = Paths.get("file2.txt");
System.out.println("Relative path: " + relative);
Path absolute = relative.toAbsolutePath();
System.out.println("Absolute path: " + absolute);
}
}
Hasta ahora sabemos qué es la interfaz de ruta, por qué la necesitamos y cómo podemos acceder a ella. Ahora sabríamos cuáles son los métodos importantes que nos proporciona la interfaz de ruta.
Métodos importantes de interfaz de ruta
getFileName() - Devuelve el sistema de archivos que creó este objeto.
getName() - Devuelve un elemento de nombre de esta ruta como un objeto de ruta.
getNameCount() - Devuelve el número de elementos de nombre en la ruta.
subpath() - Devuelve una ruta relativa que es una subsecuencia de los elementos de nombre de esta ruta.
getParent() - Devuelve la ruta principal, o nula si esta ruta no tiene un padre.
getRoot() - Devuelve el componente raíz de esta ruta como un objeto Ruta, o nulo si esta ruta no tiene un componente raíz.
toAbsolutePath() - Devuelve un objeto Path que representa la ruta absoluta de esta ruta.
toRealPath() - Devuelve la ruta real de un archivo existente.
toFile() - Devuelve un objeto File que representa esta ruta.
normalize() - Devuelve una ruta que es esta ruta con elementos de nombre redundantes eliminados.
compareTo(Path other) - Compara dos rutas abstractas lexicográficamente. Este método devuelve cero si el argumento es igual a esta ruta, un valor menor que cero si esta ruta es lexicográficamente menor que el argumento, o un valor mayor que cero si esta ruta es lexicográficamente mayor que el argumento. .
endsWith(Path other) - Comprueba si esta ruta termina con la ruta dada. Si la ruta dada tiene N elementos, y ningún componente raíz, y esta ruta tiene N o más elementos, entonces esta ruta termina con la ruta dada si los últimos N elementos de cada ruta, comenzando en el elemento más alejado de la raíz, son iguales.
endsWith(String other) - Comprueba si esta ruta termina con una ruta, construida al convertir la cadena de ruta dada, exactamente de la manera especificada por el método endsWith (Path).
Ejemplo
El siguiente ejemplo ilustra los diferentes métodos de interfaz de ruta que se mencionan anteriormente:
package com.java.nio;
import java.io.IOException;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.file.FileSystem;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
public class PathDemo {
public static void main(String[] args) throws IOException {
Path path = Paths.get("D:/workspace/ContentW/Saurav_CV.docx");
FileSystem fs = path.getFileSystem();
System.out.println(fs.toString());
System.out.println(path.isAbsolute());
System.out.println(path.getFileName());
System.out.println(path.toAbsolutePath().toString());
System.out.println(path.getRoot());
System.out.println(path.getParent());
System.out.println(path.getNameCount());
System.out.println(path.getName(0));
System.out.println(path.subpath(0, 2));
System.out.println(path.toString());
System.out.println(path.getNameCount());
Path realPath = path.toRealPath(LinkOption.NOFOLLOW_LINKS);
System.out.println(realPath.toString());
String originalPath = "d:\\data\\projects\\a-project\\..\\another-project";
Path path1 = Paths.get(originalPath);
Path path2 = path1.normalize();
System.out.println("path2 = " + path2);
}
}