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?

mat_boy
fuente

Respuestas:

454

Puedes usar la Pathsclase:

Path path = Paths.get(textPath);

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

Jon Skeet
fuente
¿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)

Karthik Karuppannan
fuente
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"
sevenforce
fuente
¿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");

Arcones
fuente
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