Crear una ruta desde una cadena en Java7


280

¿Cómo puedo crear un java.nio.file.Pathobjeto a partir de un Stringobjeto en Java 7?

Es decir

String textPath = "c:/dir1/dir2/dir3";
Path path = ?;

¿Dónde ?está el código que falta textPath?

Respuestas:


454

Puedes usar la Pathsclase:

Path path = Paths.get(textPath);

... suponiendo que desea utilizar el sistema de archivos predeterminado, por supuesto.


¿Hay alguna manera de que esto funcione con la ruta relativa y la ruta completa? es decir, dar una ruta relativa a donde está el proyecto o exe?
— shinzou

@kuhaku: Creo que deberías hacer una nueva pregunta con detalles de lo que estás tratando de hacer y lo que has intentado.
— Jon Skeet

@JonSkeet es la Path.get()plataforma independiente? lo que significa que Path.get("lib","p2") será como lib\p2en Windows y lib/p2en Linux
— Kasun Siyambalapitiya

1
@KasunSiyambalapitiya: Sí, debería estar bien así.
— Jon Skeet

1
@JonSkeet Paths.get ("/ opt / path /"); Se devuelve como "\ opt \ path \". ¿Puede por favor proporcionar la solución?
— muerto el

18

De los javadocs .. http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html

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

es lo mismo que

Path p4 = FileSystems.getDefault().getPath("/tmp/foo");

Path p3 = Paths.get(URI.create("file:///Users/joe/FileTest.java"));

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

En Windows, crea el archivo C: \ joe \ logs \ foo.log (asumiendo el inicio del usuario como C: \ joe)
En Unix, crea el archivo /u/joe/logs/foo.log (asumiendo el inicio del usuario como / u / joe)


66
Sugiero usar en File.separaratorlugar de cuidar el sistema operativo actual. Eg "/tmp/foo"isFile.separator+"tmp"+File.separator+"foo"
— mat_boy

Supongo que no crea el archivo real, pero crea un objeto Path. Puede usar el objeto de ruta para crear el archivo real en el disco, usando Files.createFile (logfilePath).
— Mr.Q

12

Si es posible, sugeriría crear Pathdirectamente desde los elementos de la ruta:

Path path = Paths.get("C:", "dir1", "dir2", "dir3");
// if needed
String textPath = path.toString(); // "C:\\dir1\\dir2\\dir3"

¿Es esta plataforma independiente?
— Kasun Siyambalapitiya

7

Incluso cuando la pregunta se refiere a Java 7, creo que agrega valor saber que desde Java 11 en adelante, hay un método estático en Pathclase que permite hacer esto de inmediato:

Con todo el camino en una cadena:

Path.of("/tmp/foo");

Con el camino desglosado en varias cadenas:

Path.of("/tmp","foo");


2
¡Finalmente proporcionaron este método!
— mat_boy

@mat_boy sí, pero no es gran cosa, de verdad. El método ya existía en Java 7, excepto que anteriormente se llamaba Paths.get.
— DodgyCodeException
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.