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.