Obtener el objeto java.nio.file.Path de java.io.File

215

¿Es posible obtener un objeto Path de a java.io.File?

Sé que puedes convertir una ruta a un archivo usando el toFile()método, pero no pude encontrar la conversión opuesta. ¿Hay alguna manera de hacer esto en Java 6 o inferior?

Karlovsky120
fuente
¿Has mirado la documentación de la API?
Vivin Paliath
Sí, vi los métodos resolve y resolveSibling, pero eso no se convirtió exactamente del archivo (o cadena) a la ruta, sino que lo concautó de alguna manera.
Karlovsky120
1
Aquí está la documentación que @VivinPaliath también alude.
Percepción
1
Me sorprende cómo la pregunta más estúpida posible (quiero decir, vamos, estaba en la documentación, una breve búsqueda en Google la habría respondido) me está dando la mayor cantidad de puntos en el sitio. : D
Karlovsky120
@ Karlovsky120 no debería sorprenderte si
intentas buscarlo

Respuestas:

288

Sí, puede obtenerlo del Fileobjeto mediante el uso File.toPath(). Tenga en cuenta que esto es solo para Java 7+. Las versiones de Java 6 y posteriores no lo tienen.

Vivin Paliath
fuente
1
¿Hay alguna manera de lograr esto en Java 6 o inferior?
Karlovsky120
8
Pathse introdujo en Java 7, por lo que desafortunadamente no hay forma de hacerlo en Java 6 y versiones posteriores.
Vivin Paliath
33

De la documentación :

Las rutas asociadas con el valor predeterminado providergeneralmente son interoperables con la java.io.Fileclase. Es poco probable que las rutas creadas por otros proveedores sean interoperables con los nombres de ruta abstractos representados por java.io.File. El toPathmétodo se puede utilizar para obtener una ruta a partir del nombre de ruta abstracto representado por un objeto java.io.File. La ruta resultante se puede utilizar para operar en el mismo archivo que el java.io.Fileobjeto. Además, el toFilemétodo es útil para construir a Filedesde la Stringrepresentación de a Path.

(énfasis mío)

Entonces, para toFile:

Devuelve un Fileobjeto que representa esta ruta.

Y toPath:

Devuelve un java.nio.file.Pathobjeto construido a partir de esta ruta abstracta.

wchargin
fuente
1
Él quiere lo contrario.
Vivin Paliath
No disputo eso :). Solo estaba mencionando lo que quería el OP.
Vivin Paliath
10

Como muchos han sugerido, JRE v1.7 y superior tiene File.toPath ();

File yourFile = ...;
Path yourPath = yourFile.toPath();

En la documentación de Oracle jdk 1.7 que también se menciona en otras publicaciones anteriores, el siguiente código equivalente se describe en la descripción del método toPath (), que puede funcionar para JRE v1.6;

File yourFile = ...;
Path yourPath = FileSystems.getDefault().getPath(yourFile.getPath());
dArtagnon
fuente