Erstellen Sie einen Pfad aus einem String in Java7

280

Wie kann ich ein java.nio.file.PathObjekt aus einem StringObjekt in Java 7 erstellen ?

Dh

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

Wo ?ist der fehlende Code, der verwendet textPath.

mat_boy
quelle

Antworten:

454

Sie können einfach die PathsKlasse verwenden:

Path path = Paths.get(textPath);

... vorausgesetzt, Sie möchten natürlich das Standard-Dateisystem verwenden.

Jon Skeet
quelle
Gibt es eine Möglichkeit, mit dem relativen Pfad und dem vollständigen Pfad zu arbeiten? dh einen Pfad relativ zu dem Ort oder der Exe angeben?
Shinzou
@kuhaku: Ich denke, du solltest eine neue Frage stellen, mit Details darüber, was du versuchst und was du versucht hast.
Jon Skeet
@ JonSkeet Path.get()ist plattformunabhängig? Das heißt, das Path.get("lib","p2") wird wie lib\p2unter Windows und lib/p2Linux sein
Kasun Siyambalapitiya
1
@ KasunSiyambalapitiya: Ja, so sollte es gut sein.
Jon Skeet
1
@ JonSkeet Paths.get ("/ opt / path /"); Es wird als "\ opt \ path \" zurückgegeben. Können Sie bitte die Lösung bereitstellen?
Deadend
18

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

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

ist das gleiche wie

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

Erstellt unter Windows die Datei C: \ joe \ logs \ foo.log (unter der Annahme, dass der Benutzer zu Hause als C: \ joe ist). Erstellt unter
Unix die Datei /u/joe/logs/foo.log (unter der Annahme, dass der Benutzer als / u / joe zu Hause ist).

Karthik Karuppannan
quelle
6
Ich schlage vor, zu verwenden, File.separaratoranstatt sich um das aktuelle Betriebssystem zu kümmern. ZB "/tmp/foo"istFile.separator+"tmp"+File.separator+"foo"
mat_boy
Ich denke, es wird nicht die eigentliche Datei erstellt, aber es wird ein Pfadobjekt erstellt. Mit dem Pfadobjekt können Sie die eigentliche Datei auf der Festplatte mithilfe von Files.createFile (logfilePath) erstellen.
Mr.Q
12

Wenn möglich würde ich vorschlagen, die PathElemente direkt aus dem Pfad zu erstellen :

Path path = Paths.get("C:", "dir1", "dir2", "dir3");
// if needed
String textPath = path.toString(); // "C:\\dir1\\dir2\\dir3"
Sevenforce
quelle
Ist diese Plattform unabhängig?
Kasun Siyambalapitiya
7

Selbst wenn es um Java 7 geht, ist es meiner Meinung nach ein Mehrwert zu wissen, dass es ab Java 11 eine statische Methode gibt Path Klasse gibt, die dies sofort ermöglicht:

Mit dem ganzen Pfad in einem String:

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

Mit dem Pfad in mehrere Strings unterteilt:

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

Arcones
quelle
2
Endlich haben sie diese Methode bereitgestellt!
mat_boy
@mat_boy ja, aber es ist wirklich keine große Sache. Die Methode war bereits in Java 7 vorhanden, außer dass sie zuvor aufgerufen wurde Paths.get.
DodgyCodeException