Создать путь из строки в Java7

280

Как я могу создать java.nio.file.Pathобъект из Stringобъекта в Java 7?

Т.е.

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

где ?недостающий код, который использует textPath.

mat_boy
источник

Ответы:

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"
sevenforce
источник
эта платформа независима?
Касун Сиямбалапития
7

Даже когда вопрос касается Java 7, я думаю, что полезно добавить, что начиная с Java 11 и далее, есть статический метод в Path классе который позволяет сделать это сразу:

Со всем путем в одной строке:

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

Путь разбит на несколько строк:

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

Arcones
источник
2
Наконец они предоставили этот метод!
mat_boy
@mat_boy да, но это не страшно, правда. Метод уже существовал в Java 7, за исключением того, что он был ранее вызван Paths.get.
DodgyCodeException