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.