Creare un percorso dalla stringa in Java7


280

Come posso creare un java.nio.file.Pathoggetto da un Stringoggetto in Java 7?

ie

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

dove ?è il codice mancante che utilizza textPath.

Risposte:


454

Puoi semplicemente usare la Pathsclasse:

Path path = Paths.get(textPath);

... supponendo che tu voglia utilizzare il file system predefinito, ovviamente.


C'è un modo per farlo funzionare con il percorso relativo e il percorso completo? vale a dire dare un percorso rispetto a dove si trova il progetto o exe?
shinzou,

@kuhaku: Penso che dovresti fare una nuova domanda con i dettagli di ciò che stai cercando di fare e di ciò che hai provato.
Jon Skeet,

@JonSkeet è Path.get()indipendente dalla piattaforma? nel senso che Path.get("lib","p2") sarà come lib\p2in Windows e lib/p2in Linux
Kasun Siyambalapitiya il

1
@KasunSiyambalapitiya: Sì, dovrebbe andare bene così.
Jon Skeet,

1
@JonSkeet Paths.get ("/ opt / path /"); Viene restituito come "\ opt \ path \". Potete per favore fornire la soluzione.
deadend

18

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

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

equivale a

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"); 

In Windows, crea il file C: \ joe \ logs \ foo.log (assumendo la home dell'utente come C: \ joe)
In Unix, crea il file /u/joe/logs/foo.log (assumendo la home dell'utente come / u / joe)


6
Suggerisco di usare File.separaratorinvece di occuparsi dell'attuale sistema operativo. Ad esempio, "/tmp/foo"èFile.separator+"tmp"+File.separator+"foo"
mat_boy

Immagino che non crei il file effettivo, ma crea un oggetto Path. È possibile utilizzare l'oggetto path per creare il file effettivo sul disco, utilizzando Files.createFile (logfilePath).
Mr.Q,

12

Se possibile, suggerirei di creare Pathdirettamente dagli elementi del percorso:

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

questa piattaforma è indipendente?
Kasun Siyambalapitiya il

7

Anche quando la domanda riguarda Java 7, penso che aggiunga valore sapere che da Java 11 in poi esiste un metodo statico in Pathclasse che consente di farlo immediatamente:

Con tutto il percorso in una stringa:

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

Con il percorso suddiviso in più stringhe:

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


2
Alla fine hanno fornito questo metodo!
mat_boy,

@mat_boy sì, ma non è un grosso problema, davvero. Il metodo esisteva già in Java 7, tranne per il fatto che era stato precedentemente chiamato Paths.get.
DodgyCodeException
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.