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.

Jawaban:


454

Anda bisa menggunakan Pathskelas:

Path path = Paths.get(textPath);

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


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)


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"

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.