Tạo một đường dẫn từ chuỗi trong Java7


280

Làm cách nào để tạo một java.nio.file.Pathđối tượng từ một Stringđối tượng trong Java 7?

I E

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

nơi ?là mã mất tích mà sử dụng textPath.

Câu trả lời:


454

Bạn chỉ có thể sử dụng Pathslớp:

Path path = Paths.get(textPath);

... giả sử bạn muốn sử dụng hệ thống tập tin mặc định, tất nhiên.


Có cách nào để làm việc này với đường dẫn tương đối và đường dẫn đầy đủ không? tức là đưa ra một đường dẫn liên quan đến nơi dự án hoặc exe là?
shinzou

@kuhaku: Tôi nghĩ bạn nên hỏi một câu hỏi mới với chi tiết về những gì bạn đang cố gắng làm và những gì bạn đã cố gắng.
Jon Skeet

@JonSkeet là Path.get()nền tảng độc lập? có nghĩa là Path.get("lib","p2") sẽ như lib\p2trong Windows và lib/p2trong linux
Kasun Siyambalapitiya

1
@KasunSiyambalapitiya: Vâng, nó sẽ ổn như thế.
Jon Skeet

1
@JonSkeet Paths.get ("/ opt / path /"); Nó trả về là "\ opt \ path \". Bạn có thể vui lòng cung cấp giải pháp.
cụt

18

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

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

giống như

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

Trong Windows, tạo tệp C: \ joe \ log \ foo.log (giả sử nhà của người dùng là C: \ joe)
Trong Unix, tạo tệp /u/joe/logs/foo.log (giả sử nhà của người dùng là / u / joe)


6
Tôi đề nghị sử dụng File.separaratorthay vì chăm sóc HĐH hiện tại. Ví dụ như "/tmp/foo"File.separator+"tmp"+File.separator+"foo"
mat_boy

Tôi đoán nó không tạo tập tin thực sự, nhưng nó tạo ra một đối tượng Path. Bạn có thể sử dụng đối tượng đường dẫn để tạo tệp thực tế trên đĩa, sử dụng Files.createFile (logfilePath).
Mr.Q

12

Nếu có thể tôi sẽ đề nghị tạo Pathtrực tiếp từ các thành phần đường dẫn:

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

nền tảng này là độc lập?
Kasun Siyambalapitiya

7

Ngay cả khi câu hỏi liên quan đến Java 7, tôi nghĩ rằng nó bổ sung giá trị để biết rằng từ Java 11 trở đi, có một phương thức tĩnh trong Path lớp cho phép thực hiện điều này ngay lập tức:

Với tất cả các đường dẫn trong một Chuỗi:

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

Với đường dẫn được chia thành nhiều chuỗi:

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


2
Cuối cùng họ đã cung cấp phương pháp này!
mat_boy

@mat_boy vâng, nhưng nó không phải là vấn đề lớn, thực sự. Phương thức đã tồn tại trong Java 7, ngoại trừ nó đã được gọi trước đó Paths.get.
DodgyCodeException 7/2/19
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.