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.

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.


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)


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"

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.