Utwórz ścieżkę z ciągu w Javie 7

280

Jak mogę utworzyć java.nio.file.Pathobiekt z Stringobiektu w Javie 7?

To znaczy

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

gdzie ?jest brakujący kod, który używa textPath.

mat_boy
źródło

Odpowiedzi:

454

Możesz po prostu użyć Pathsklasy:

Path path = Paths.get(textPath);

... zakładając oczywiście, że chcesz użyć domyślnego systemu plików.

Jon Skeet
źródło
Czy istnieje sposób, aby działało to z względną ścieżką i pełną ścieżką? tzn. podając ścieżkę względem tego, gdzie znajduje się projekt lub exe?
shinzou,
@kuhaku: Myślę, że powinieneś zadać nowe pytanie ze szczegółami tego, co próbujesz zrobić i co próbowałeś.
Jon Skeet,
@JonSkeet jest Path.get()niezależny od platformy? co Path.get("lib","p2") będzie tak jak lib\p2w Windowsie i lib/p2Linuksie
Kasun Siyambalapitiya
1
@KasunSiyambalapitiya: Tak, tak powinno być dobrze.
Jon Skeet
1
@JonSkeet Paths.get ("/ opt / path /"); Zwraca jako „\ opt \ path \”. Czy możesz podać rozwiązanie.
deadend
18

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

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

jest taki sam jak

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

W systemie Windows tworzy plik C: \ joe \ logs \ foo.log (zakładając, że użytkownik domowy to C: \ joe)
W systemie Unix tworzy plik /u/joe/logs/foo.log (zakładając, że użytkownik domowy to / u / joe)

Karthik Karuppannan
źródło
6
Sugeruję używać File.separaratorzamiast dbać o obecny system operacyjny. Np. "/tmp/foo"JestFile.separator+"tmp"+File.separator+"foo"
mat_boy
Chyba nie tworzy rzeczywistego pliku, ale tworzy obiekt Path. Możesz użyć obiektu ścieżki do utworzenia rzeczywistego pliku na dysku, używając Files.createFile (logfilePath).
Mr.Q
12

Jeśli to możliwe, sugeruję utworzenie Pathbezpośrednio z elementów ścieżki:

Path path = Paths.get("C:", "dir1", "dir2", "dir3");
// if needed
String textPath = path.toString(); // "C:\\dir1\\dir2\\dir3"
sevenforce
źródło
czy ta platforma jest niezależna?
Kasun Siyambalapitiya
7

Nawet jeśli pytanie dotyczy Javy 7, myślę, że wartość dodana polega na tym, że od Javy 11 istnieje metoda statyczna w Pathklasie, która pozwala to zrobić od razu:

Z całą ścieżką w jednym ciągu:

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

Ze ścieżką podzieloną na kilka ciągów:

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

Arcones
źródło
2
Wreszcie udostępnili tę metodę!
mat_boy
@ mat_boy tak, ale to naprawdę nic wielkiego. Ta metoda istniała już w Javie 7, tyle że wcześniej została wywołana Paths.get.
DodgyCodeException