Czy System.IO.Path.Combine()
w C # / .NET istnieje odpowiednik Java ? Lub jakiś kod, aby to osiągnąć?
Ta metoda statyczna łączy jeden lub więcej ciągów w ścieżkę.
Czy System.IO.Path.Combine()
w C # / .NET istnieje odpowiednik Java ? Lub jakiś kod, aby to osiągnąć?
Ta metoda statyczna łączy jeden lub więcej ciągów w ścieżkę.
Odpowiedzi:
Zamiast utrzymywać wszystko oparte na łańcuchach, powinieneś użyć klasy zaprojektowanej do reprezentowania ścieżki systemu plików.
Jeśli używasz Java 7 lub Java 8, powinieneś zdecydowanie rozważyć użycie
java.nio.file.Path
;Path.resolve
można użyć do połączenia jednej ścieżki z drugą lub z łańcuchem.Paths
Klasa pomocnika jest zbyt przydatny. Na przykład:Jeśli chcesz obsługiwać środowiska starsze niż Java-7, możesz użyć
java.io.File
:Jeśli chcesz później wrócić jako ciąg znaków, możesz zadzwonić
getPath()
. Rzeczywiście, jeśli naprawdę chcesz naśladowaćPath.Combine
, możesz po prostu napisać coś takiego:źródło
path2
(ignorujepath1
), jeślipath2
jest to ścieżka bezwzględna. Wersja Java upuści wiodący/
lub\
potraktuje go jako ścieżkę względną.File.getCanonicalPath
.File
w C #, jeśli chcesz. (Zakładam, że masz na myśli istnienieFile
korzyści, z którą się zgodziłbym.)W Javie 7 powinieneś użyć
resolve
:Chociaż klasa Ścieżka NIO2 może wydawać się nieco redundantna dla File z niepotrzebnie innym API, jest w rzeczywistości subtelniej bardziej elegancka i solidna.
Zauważ, że
Paths.get()
(jak sugeruje ktoś inny) nie ma przeciążenia biorącPath
, a robieniePaths.get(path.toString(), childPath)
NIE jest tym samymresolve()
. ZPaths.get()
dokumentów :Funkcja siostrzana
resolve
to doskonałarelativize
:źródło
Główną odpowiedzią jest użycie obiektów File. Jednak Commons IO ma klasę FilenameUtils, która potrafi tego typu rzeczy, takie jak metoda concat () .
źródło
Wiem, że minęło dużo czasu od oryginalnej odpowiedzi Jona, ale miałem podobny wymóg co OP.
Rozszerzając rozwiązanie Jona, wymyśliłem następujące, które zajmą jeden lub więcej segmentów ścieżki, zajmując tyle segmentów ścieżki, ile możesz na nią rzucić.
Stosowanie
Kod tutaj dla innych z podobnym problemem
źródło
niezależne od platformy podejście (wykorzystuje File.separator, tzn. będzie działać, zależy od systemu operacyjnego, w którym działa kod:
źródło
Aby ulepszyć odpowiedź JodaStephen, Apache Commons IO ma FilenameUtils, który to robi. Przykład (w systemie Linux):
Jest niezależny od platformy i produkuje wszelkie separatory, których potrzebuje Twój system.
źródło
Oto rozwiązanie, które obsługuje wiele części ścieżki i warunki krawędzi:
źródło
Jeśli nie potrzebujesz więcej niż ciągów, możesz użyć com.google.common.io.Files
dostać
źródło
Może późno na imprezę, ale chciałem się z tym zgodzić. Używam wzorca konstruktora i zezwalam na wygodne
append
połączenia łańcuchowe . Można go łatwo rozszerzyć, aby obsługiwał także pracę zPath
obiektami.Przykład użycia:
Wynikowy
absolute
będzie zawierać coś takiego:a może nawet:
źródło
Działa to również w Javie 8:
źródło
To rozwiązanie oferuje interfejs do łączenia fragmentów ścieżek z tablicy String []. Używa java.io.File.File (String string, child String) :
Następnie możesz po prostu zrobić:
Zwroty:
źródło