สร้างเส้นทางจากสตริงใน Java7


280

ฉันจะสร้างjava.nio.file.PathวัตถุจากStringวัตถุใน Java 7 ได้อย่างไร

กล่าวคือ

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

ที่เป็นรหัสที่ใช้หายไป?textPath

คำตอบ:


454

คุณสามารถใช้Pathsคลาส:

Path path = Paths.get(textPath);

... สมมติว่าคุณต้องการใช้ระบบไฟล์เริ่มต้นแน่นอน


มีวิธีการนี้ในการทำงานกับเส้นทางสัมพัทธ์และเส้นทางแบบเต็มหรือไม่ เช่นให้เส้นทางสัมพันธ์กับที่โครงการหรือ exe คืออะไร
shinzou

@kuhaku: ฉันคิดว่าคุณควรถามคำถามใหม่พร้อมรายละเอียดเกี่ยวกับสิ่งที่คุณพยายามทำและสิ่งที่คุณได้ลอง
Jon Skeet

@JonSkeet เป็นPath.get()แพลตฟอร์มอิสระหรือไม่ ความหมายที่Path.get("lib","p2") จะเป็นlib\p2ใน Windows และlib/p2ใน linux
Kasun Siyambalapitiya

1
@KasunSiyambalapitiya: ใช่มันน่าจะดีนะ
Jon Skeet

1
@JonSkeet Paths.get ("/ opt / path /"); ผลตอบแทนมันเป็น "\ opt \ path \" คุณช่วยแก้ปัญหาได้ไหม
สิ้นสุด

18

จาก javadocs .. http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html

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

เป็นเช่นเดียวกับ

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

ใน Windows ให้สร้างไฟล์ C: \ joe \ log \ foo.log (สมมติว่าผู้ใช้เป็นโฮมเป็น C: \ joe)
ในระบบปฏิบัติการ Unix ให้สร้างไฟล์ /u/joe/logs/foo.log (สมมติว่าผู้ใช้เป็นโฮม / u / joe)


6
ฉันแนะนำให้ใช้File.separaratorแทนการดูแลระบบปฏิบัติการปัจจุบัน เช่น"/tmp/foo"เป็นFile.separator+"tmp"+File.separator+"foo"
mat_boy

ฉันเดาว่ามันจะไม่สร้างไฟล์จริง แต่มันสร้างอ็อบเจกต์ Path คุณสามารถใช้อ็อบเจ็กต์พา ธ เพื่อสร้างไฟล์จริงบนดิสก์โดยใช้ Files.createFile (logfilePath)
Mr.Q

12

ถ้าเป็นไปได้ฉันขอแนะนำให้สร้างPathโดยตรงจากองค์ประกอบเส้นทาง:

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

แพลตฟอร์มนี้เป็นอิสระหรือไม่
Kasun Siyambalapitiya

7

แม้ว่าคำถามจะเกี่ยวกับ Java 7 ฉันคิดว่ามันเพิ่มคุณค่าให้กับการรู้ว่าจาก Java 11 เป็นต้นไปมีวิธีการคงที่ในPathชั้นเรียนที่ช่วยให้ทำสิ่งนี้ได้ทันที:

ด้วยพา ธ ทั้งหมดในสตริงเดียว:

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

ด้วยทางแยกย่อยในหลายสาย:

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


2
ในที่สุดพวกเขาก็ให้วิธีนี้!
mat_boy

@mat_boy ใช่ แต่มันไม่ใช่เรื่องใหญ่อะไรจริงๆ วิธีการที่มีอยู่แล้วใน Java 7 Paths.getยกเว้นมันถูกเรียกว่าก่อนหน้านี้
DodgyCodeException
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.