Está en la página 1de 9

23/5/2021 Operaciones de ruta (Tutoriales de Java ™> Clases esenciales> E / S básica)

Documentación

Los tutoriales de Java ™

Ruta: Clases esenciales


Lección: E / S básica
Sección: E / S de archivos (con NIO.2)
Subsección: La clase de ruta

Los tutoriales de Java se han escrito para JDK 8. Los ejemplos y prácticas descritos en esta página no aprovechan las mejoras introducidas en versiones
posteriores y es posible que utilicen tecnología que ya no está disponible.
Consulte Cambios en el lenguaje Java para obtener un resumen de las características del lenguaje actualizadas en Java SE 9 y versiones posteriores.
Consulte las Notas de la versión de JDK para obtener información sobre nuevas funciones, mejoras y opciones eliminadas o en desuso para todas las versiones
de JDK.

Operaciones de ruta
La Pathclase incluye varios métodos que se pueden utilizar para obtener información sobre la ruta, acceder a elementos de la ruta, convertir la ruta a otras
formas o extraer partes de una ruta. También existen métodos para hacer coincidir la cadena de ruta y métodos para eliminar redundancias en una ruta. Esta
lección aborda estos Pathmétodos, a veces llamados operaciones sintácticas , porque operan en la ruta misma y no acceden al sistema de archivos.

Esta sección cubre lo siguiente:

Creando un camino
Recuperar información sobre una ruta
Eliminar redundancias de una ruta
Convertir una ruta
Uniendo dos caminos
Crear un camino entre dos caminos
Comparando dos caminos

Creando un camino

https://docs.oracle.com/javase/tutorial/essential/io/pathOps.html 1/9
23/5/2021 Operaciones de ruta (Tutoriales de Java ™> Clases esenciales> E / S básica)

Una Pathinstancia contiene la información utilizada para especificar la ubicación de un archivo o directorio. En el momento en que se define, Pathse proporciona
a una serie de uno o más nombres. Se puede incluir un elemento raíz o un nombre de archivo, pero no es obligatorio. A Pathpodría constar de un solo directorio
o nombre de archivo.

Puede crear fácilmente un Pathobjeto utilizando uno de los siguientes getmétodos de la Pathsclase auxiliar (tenga en cuenta el plural):

Ruta p1 = Paths.get ("/ tmp / foo");


Ruta p2 = Paths.get (args [0]);
Ruta p3 = Paths.get (URI.create ("archivo: ///Users/joe/FileTest.java"));

El Paths.getmétodo es una abreviatura del siguiente código:

Ruta p4 = FileSystems.getDefault (). GetPath ("/ users / sally");

El siguiente ejemplo crea /u/joe/logs/foo.logasumiendo que su directorio de inicio es /u/joe, o C:\joe\logs\foo.logsi está en Windows.

Ruta p5 = Paths.get (System.getProperty ("user.home"), "logs", "foo.log");

Recuperar información sobre una ruta

Puede pensar en el Pathalmacenamiento de estos elementos de nombre como una secuencia. El elemento más alto en la estructura del directorio estaría
ubicado en el índice 0. El elemento más bajo en la estructura del directorio estaría ubicado en el índice [n-1], donde nes el número de elementos de nombre en
Path. Hay métodos disponibles para recuperar elementos individuales o una subsecuencia del Pathuso de estos índices.

Los ejemplos de esta lección utilizan la siguiente estructura de directorios.

https://docs.oracle.com/javase/tutorial/essential/io/pathOps.html 2/9
23/5/2021 Operaciones de ruta (Tutoriales de Java ™> Clases esenciales> E / S básica)

Estructura de directorio de muestra

El siguiente fragmento de código define una Pathinstancia y luego invoca varios métodos para obtener información sobre la ruta:

// Ninguno de estos métodos requiere que el archivo correspondiente


// al Camino existe.
// Sintaxis de Microsoft Windows
Ruta ruta = Paths.get ("C: \\ inicio \\ joe \\ foo");

// Sintaxis de Solaris
Ruta ruta = Paths.get ("/ home / joe / foo");

System.out.format ("toString:% s% n", ruta.toString ());


System.out.format ("getFileName:% s% n", ruta.getFileName ());
System.out.format ("getName (0):% s% n", ruta.getName (0));
System.out.format ("getNameCount:% d% n", ruta.getNameCount ());
System.out.format ("subruta (0,2):% s% n", ruta.subruta (0,2));
System.out.format ("getParent:% s% n", ruta.getParent ());
System.out.format ("getRoot:% s% n", path.getRoot ());

Aquí está el resultado tanto para Windows como para el sistema operativo Solaris:

Método Devoluciones Devoluciones en Comentario

https://docs.oracle.com/javase/tutorial/essential/io/pathOps.html 3/9
23/5/2021 Operaciones de ruta (Tutoriales de Java ™> Clases esenciales> E / S básica)

invocado en el SO Solaris Microsoft


Windows
Devuelve la representación de cadena de Path. Si la ruta se creó usando
Filesystems.getDefault().getPath(String)o Paths.get(este último es un método
toString /home/joe/foo C:\home\joe\foo
conveniente para getPath), el método realiza una limpieza sintáctica menor. Por ejemplo, en un
sistema operativo UNIX, corregirá la cadena de entrada //home/joe/fooa /home/joe/foo.
getFileName foo foo Devuelve el nombre del archivo o el último elemento de la secuencia de elementos del nombre.
Devuelve el elemento de ruta correspondiente al índice especificado. El elemento 0 es el elemento de
getName(0) home home
ruta más cercano a la raíz.
getNameCount 3 3 Devuelve el número de elementos de la ruta.
Devuelve la subsecuencia del Path(sin incluir un elemento raíz) según lo especificado por los índices
subpath(0,2) home/joe home\joe
inicial y final.
getParent /home/joe \home\joe Devuelve la ruta del directorio principal.
getRoot / C:\ Devuelve la raíz de la ruta.

El ejemplo anterior muestra la salida de una ruta absoluta. En el siguiente ejemplo, se especifica una ruta relativa:

// Sintaxis de Solaris
Ruta ruta = Paths.get ("sally / bar");
o
// Sintaxis de Microsoft Windows
Ruta ruta = Paths.get ("sally \\ bar");

Aquí está el resultado para Windows y el sistema operativo Solaris:

Método invocado Devoluciones en el SO Solaris Devoluciones en Microsoft Windows


toString sally/bar sally\bar
getFileName bar bar
getName(0) sally sally
getNameCount 2 2
subpath(0,1) sally sally
getParent sally sally
getRoot null null

Eliminar redundancias de una ruta

https://docs.oracle.com/javase/tutorial/essential/io/pathOps.html 4/9
23/5/2021 Operaciones de ruta (Tutoriales de Java ™> Clases esenciales> E / S básica)

Muchos sistemas de archivos utilizan "." notación para indicar el directorio actual y ".." para indicar el directorio principal. Es posible que tenga una situación en la
que Pathcontenga información de directorio redundante. Quizás un servidor esté configurado para guardar sus archivos de registro en el /dir/logs/.directorio
" " y desee eliminar la /.notación " " final de la ruta.

Los siguientes ejemplos incluyen redundancias:

/home/./joe/foo
/home/sally/../joe/foo

El normalizemétodo elimina cualquier elemento redundante, que incluye cualquier " ." o " directory/.." ocurrencias. Los dos ejemplos anteriores se
normalizan a /home/joe/foo.

Es importante tener en cuenta que normalizeno verifica el sistema de archivos cuando limpia una ruta. Es una operación puramente sintáctica. En el segundo
ejemplo, si sallyfuera un enlace simbólico, eliminarlo sally/..podría dar como resultado Pathque ya no localice el archivo deseado.

Para limpiar una ruta y asegurarse de que el resultado ubica el archivo correcto, puede usar el toRealPathmétodo. Este método se describe en la siguiente
sección, Conversión de una ruta .

Convertir una ruta

Puede utilizar tres métodos para convertir el Path. Si necesita convertir la ruta en una cadena que se pueda abrir desde un navegador, puede usar toUri. Por
ejemplo:

Ruta p1 = Paths.get ("/ home / logfile");


// El resultado es file: /// home / logfile
System.out.format ("% s% n", p1.toUri ());

El toAbsolutePathmétodo convierte una ruta en una ruta absoluta. Si la ruta pasada ya es absoluta, devuelve el mismo Pathobjeto. El
toAbsolutePathmétodo puede resultar muy útil al procesar nombres de archivos introducidos por el usuario. Por ejemplo:

FileTest de clase pública {


public static void main (String [] args) {

if (args.length <1) {
System.out.println ("uso: archivo FileTest");
System.exit (-1);
}

// Convierte la cadena de entrada en un objeto Path.


Ruta inputPath = Paths.get (args [0]);

// Convierte la ruta de entrada


https://docs.oracle.com/javase/tutorial/essential/io/pathOps.html 5/9
23/5/2021 Operaciones de ruta (Tutoriales de Java ™> Clases esenciales> E / S básica)

// a una ruta absoluta.


// Generalmente, esto significa anteponer
// el trabajo actual
// directorio. Si este ejemplo
// fueron llamados así:
// java FileTest foo
// los métodos getRoot y getParent
// devolvería nulo
// en el "inputPath" original
// instancia. Invocando getRoot y
// getParent en "fullPath"
// instancia devuelve valores esperados.
Ruta fullPath = inputPath.toAbsolutePath ();
}
}

El toAbsolutePathmétodo convierte la entrada del usuario y devuelve un valor Pathque devuelve valores útiles cuando se consulta. No es necesario que el
archivo exista para que este método funcione.

El toRealPathmétodo devuelve la ruta real de un archivo existente. Este método realiza varias operaciones en una:

Si truese pasa a este método y el sistema de archivos admite enlaces simbólicos, este método resuelve cualquier enlace simbólico en la ruta.
Si Pathes relativo, devuelve una ruta absoluta.
Si Pathcontiene elementos redundantes, devuelve una ruta con esos elementos eliminados.

Este método genera una excepción si el archivo no existe o no se puede acceder a él. Puede detectar la excepción cuando desee manejar cualquiera de estos
casos. Por ejemplo:

intentar {
Ruta fp = ruta.toRealPath ();
} captura (NoSuchFileException x) {
System.err.format ("% s: no existe tal" + "archivo o directorio% n", ruta);
// Lógica para el caso en que el archivo no existe.
} captura (IOException x) {
System.err.format ("% s% n", x);
// Lógica para otro tipo de error de archivo.
}

Uniendo dos caminos

https://docs.oracle.com/javase/tutorial/essential/io/pathOps.html 6/9
23/5/2021 Operaciones de ruta (Tutoriales de Java ™> Clases esenciales> E / S básica)

Puede combinar rutas utilizando el resolvemétodo. Pasa en una ruta parcial , que es una ruta que no incluye un elemento raíz, y esa ruta parcial se agrega a la
ruta original.

Por ejemplo, considere el siguiente fragmento de código:

// Solaris
Ruta p1 = Paths.get ("/ home / joe / foo");
// El resultado es / home / joe / foo / bar
System.out.format ("% s% n", p1.resolve ("barra"));

// Microsoft Windows
Ruta p1 = Paths.get ("C: \\ casa \\ joe \\ foo");
// El resultado es C: \ home \ joe \ foo \ bar
System.out.format ("% s% n", p1.resolve ("barra"));

Pasar una ruta absoluta al resolvemétodo devuelve la ruta pasada:

// El resultado es / home / joe


Paths.get ("foo"). Resolve ("/ home / joe");

Crear un camino entre dos caminos

Un requisito común al escribir código de E / S de archivo es la capacidad de construir una ruta desde una ubicación en el sistema de archivos a otra ubicación.
Puedes cumplir con esto usando el relativizemétodo. Este método construye una ruta que se origina en la ruta original y termina en la ubicación especificada
por la ruta pasada. La nueva ruta es relativa a la ruta original.

Por ejemplo, considere dos rutas relativas definidas como joey sally:

Ruta p1 = Paths.get ("joe");


Ruta p2 = Paths.get ("sally");

En ausencia de cualquier otra información, se supone que joey sallyson hermanos, es decir, nodos que residen en el mismo nivel en la estructura del árbol.
Para navegar de joea sally, esperaría navegar primero un nivel hasta el nodo principal y luego hacia abajo a sally:

// El resultado es ../sally
Ruta p1_to_p2 = p1.relativize (p2);
// El resultado es ../joe
Ruta p2_to_p1 = p2.relativize (p1);

Considere un ejemplo un poco más complicado:

https://docs.oracle.com/javase/tutorial/essential/io/pathOps.html 7/9
23/5/2021 Operaciones de ruta (Tutoriales de Java ™> Clases esenciales> E / S básica)

Ruta p1 = Paths.get ("casa");


Ruta p3 = Paths.get ("inicio / sally / bar");
// El resultado es sally / bar
Ruta p1_to_p3 = p1.relativize (p3);
// El resultado es ../ ..
Ruta p3_to_p1 = p3.relativize (p1);

En este ejemplo, las dos trayectorias comparten el mismo nodo, home. Para navegar de homea bar, primero navega un nivel hacia abajo sallyy luego un nivel
más hacia abajo bar. Navegar de bara homerequiere subir dos niveles.

No se puede construir una ruta relativa si solo una de las rutas incluye un elemento raíz. Si ambas rutas incluyen un elemento raíz, la capacidad de construir una
ruta relativa depende del sistema.

El Copyejemplo recursivo usa los métodos relativizey resolve.

Comparando dos caminos

La Pathclase admite equals, lo que le permite probar dos caminos para la igualdad. Los métodos startsWithy le endsWithpermiten probar si una ruta
comienza o termina con una cadena en particular. Estos métodos son fáciles de usar. Por ejemplo:

Ruta ruta = ...;


Ruta otherPath = ...;
Inicio de ruta = Paths.get ("/ home");
Final de ruta = Paths.get ("foo");

if (ruta.equals (otra ruta)) {


// lógica de igualdad aquí
} else if (path.startsWith (comienzo)) {
// la ruta comienza con "/ home"
} else if (path.endsWith (final)) {
// la ruta termina con "foo"
}

La Pathclase implementa la Iterableinterfaz. El iteratormétodo devuelve un objeto que le permite iterar sobre los elementos del nombre en la ruta. El primer
elemento devuelto es el más cercano a la raíz en el árbol de directorios. El siguiente fragmento de código itera sobre una ruta, imprimiendo cada elemento del
nombre:

Ruta ruta = ...;


para (Nombre de ruta: ruta) {
System.out.println (nombre);
}

https://docs.oracle.com/javase/tutorial/essential/io/pathOps.html 8/9
23/5/2021 Operaciones de ruta (Tutoriales de Java ™> Clases esenciales> E / S básica)

La Pathclase también implementa la Comparableinterfaz. Puede comparar Pathobjetos utilizando lo compareToque sea útil para ordenar.

También puede poner Pathobjetos en un Collection. Consulte la ruta Colecciones para obtener más información sobre esta potente función.

Cuando desee verificar que dos Pathobjetos ubican el mismo archivo, puede usar el isSameFilemétodo, como se describe en Verificación de si dos rutas
ubican el mismo archivo .

Acerca de Oracle | Comuníquese con nosotros | Avisos legales | Condiciones de uso | Sus derechos de privacidad

Copyright © 1995, 2021 Oracle y / o sus filiales. Reservados todos los derechos.

Página anterior: La clase de ruta


Página siguiente: Operaciones de archivo

https://docs.oracle.com/javase/tutorial/essential/io/pathOps.html 9/9

También podría gustarte