Pobierz obiekt java.nio.file.Path z pliku java.io.File

215

Czy można uzyskać obiekt Path z java.io.File?

Wiem, że możesz przekonwertować ścieżkę do pliku za pomocą toFile()metody, ale nie mogłem znaleźć odwrotnej konwersji. Czy można to zrobić w Javie 6 lub nowszej?

Karlovsky120
źródło
Czy widziałeś dokumentację API?
Vivin Paliath,
Tak, widziałem metody resol i resolSibling, ale to nie dokładnie przekonwertowało z pliku (lub łańcucha) na ścieżkę, ale raczej w pewien sposób je podsumowało.
Karlovsky120,
1
Oto dokumentacja, do której nawiązuje również @VivinPaliath.
Percepcja
1
Zaskakuje mnie, jak najgłupsze możliwe pytanie (to znaczy, daj spokój, było w dokumentacji, odpowiedziałoby na to krótkie wyszukiwanie w Google) daje najwięcej punktów na stronie. : D
Karlovsky120,
@ Karlovsky120 nie powinno cię dziwić, gdybyś sam spróbował google;)
9ilsdx 9rvj 0lo

Odpowiedzi:

288

Tak, możesz pobrać go z Fileobiektu za pomocą File.toPath(). Pamiętaj, że dotyczy to tylko Java 7+. Wersje Java 6 i niższe nie mają tego.

Vivin Paliath
źródło
1
Czy istnieje sposób na osiągnięcie tego w Javie 6 lub niższej?
Karlovsky120
8
Pathzostał wprowadzony w Javie 7, więc niestety nie można tego zrobić w Javie 6 i niższych.
Vivin Paliath
33

Z dokumentacji :

Ścieżki powiązane z domyślną providersą na ogół interoperacyjne z java.io.Fileklasą. Ścieżki utworzone przez innych dostawców raczej nie będą interoperacyjne z abstrakcyjnymi nazwami ścieżek reprezentowanymi przez java.io.File. Metoda może być stosowana w celu uzyskania ścieżki od abstrakcyjnej nazwy ścieżki reprezentowanej przez obiekt java.io.File. Powstała ścieżka może być używana do działania na tym samym pliku, co obiekt. Ponadto metoda jest przydatna do skonstruowania z reprezentacji a .toPathjava.io.FiletoFileFileStringPath

(moje podkreślenie)

Tak więc dla toFile:

Zwraca Fileobiekt reprezentujący tę ścieżkę.

I toPath:

Zwraca java.nio.file.Pathobiekt zbudowany z tej abstrakcyjnej ścieżki.

wchargin
źródło
1
On chce czegoś przeciwnego.
Vivin Paliath,
Nie podważam tego :). Właśnie wspomniałem o tym, czego chciał PO.
Vivin Paliath,
10

Jak wielu sugerowało, JRE w wersji 1.7 i nowszej ma File.toPath ();

File yourFile = ...;
Path yourPath = yourFile.toPath();

W dokumentacji jdk 1.7 Oracle, wspomnianej również w innych postach powyżej, w opisie metody toPath (), która może działać w JRE v1.6, opisano następujący równoważny kod;

File yourFile = ...;
Path yourPath = FileSystems.getDefault().getPath(yourFile.getPath());
dArtagnon
źródło