Створіть Шлях із String в 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: Я думаю, вам слід задати нове запитання з деталями того, що ви намагаєтеся зробити і що ви намагалися.
Джон Скіт

@JonSkeet це Path.get()незалежна платформа? сенс, який Path.get("lib","p2") буде як lib\p2у Windows, так і lib/p2в Linux
Kasun Siyambalapitiya

1
@KasunSiyambalapitiya: Так, це має бути добре.
Джон Скіт

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 \ logs \ 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.