Создать путь из строки в 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?
Синдзоу

@kuhaku: Я думаю, что вы должны задать новый вопрос с подробной информацией о том, что вы пытаетесь сделать и что вы пытались.
Джон Скит

@JonSkeet является Path.get()независимым от платформы? это означает, что Path.get("lib","p2") будет как lib\p2в Windows, так и lib/p2в Linux
Касун Сиямбалапития

1
@KasunSiyambalapitiya: Да, все должно быть в порядке.
Джон Скит

1
@JonSkeet Paths.get ("/ opt / path /"); Возвращается как "\ opt \ path \". Можете ли вы предоставить решение.
17

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. Вы можете использовать объект 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"

эта платформа независима?
Касун Сиямбалапития

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.