Buat Path dari String di Java7

280

Bagaimana saya bisa membuat java.nio.file.Pathobjek dari Stringobjek di Java 7?

Yaitu

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

di mana ?kode hilang yang digunakan textPath.

mat_boy
sumber

Jawaban:

454

Anda bisa menggunakan Pathskelas:

Path path = Paths.get(textPath);

... dengan asumsi Anda ingin menggunakan sistem file default, tentu saja.

Jon Skeet
sumber
Apakah ada cara untuk ini bekerja dengan jalur relatif dan jalur penuh? yaitu memberikan jalur relatif ke tempat proyek atau exe berada?
shinzou
@kuhaku: Saya pikir Anda harus mengajukan pertanyaan baru dengan perincian tentang apa yang Anda coba lakukan dan apa yang telah Anda coba.
Jon Skeet
@ JonSkeet apakah Path.get()platform independen? artinya Path.get("lib","p2") akan seperti lib\p2di Windows dan lib/p2di linux
Kasun Siyambalapitiya
1
@KasunSiyambalapitiya: Ya, seharusnya tidak masalah.
Jon Skeet
1
@JonSkeet Paths.get ("/ opt / path /"); Pengembaliannya sebagai "\ opt \ path \". Bisakah Anda memberikan solusinya?
deadend
18

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

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

sama dengan

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

Di Windows, buat file C: \ joe \ logs \ foo.log (dengan asumsi rumah pengguna sebagai C: \ joe)
Di Unix, buat file /u/joe/logs/foo.log (dengan asumsi rumah pengguna sebagai / u / joe)

Karthik Karuppannan
sumber
6
Saya menyarankan untuk menggunakan File.separaratordaripada merawat OS saat ini. Misalnya "/tmp/foo"adalahFile.separator+"tmp"+File.separator+"foo"
mat_boy
Saya kira itu tidak membuat file yang sebenarnya, tetapi itu menciptakan objek Path. Anda dapat menggunakan objek path untuk membuat file aktual pada disk, menggunakan Files.createFile (logfilePath).
Mr.Q
12

Jika memungkinkan, saya sarankan untuk membuat Pathlangsung dari elemen path:

Path path = Paths.get("C:", "dir1", "dir2", "dir3");
// if needed
String textPath = path.toString(); // "C:\\dir1\\dir2\\dir3"
sevenforce
sumber
Apakah platform ini independen?
Kasun Siyambalapitiya
7

Bahkan ketika pertanyaannya tentang Java 7, saya pikir itu menambah nilai untuk mengetahui bahwa dari Java 11 dan seterusnya, ada metode statis di Pathkelas yang memungkinkan untuk melakukan ini langsung:

Dengan semua jalur dalam satu String:

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

Dengan jalur yang dipecah dalam beberapa String:

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

Arcones
sumber
2
Akhirnya mereka menyediakan metode ini!
mat_boy
@mat_boy ya tapi itu bukan masalah besar, sungguh. Metode ini sudah ada di Java 7, kecuali sebelumnya disebut Paths.get.
DodgyCodeException