Gibt es ein Java-Äquivalent für System.IO.Path.Combine()
in C # /. NET? Oder irgendein Code, um dies zu erreichen?
Diese statische Methode kombiniert eine oder mehrere Zeichenfolgen zu einem Pfad.
Gibt es ein Java-Äquivalent für System.IO.Path.Combine()
in C # /. NET? Oder irgendein Code, um dies zu erreichen?
Diese statische Methode kombiniert eine oder mehrere Zeichenfolgen zu einem Pfad.
Antworten:
Anstatt alles stringbasiert zu halten, sollten Sie eine Klasse verwenden, die einen Dateisystempfad darstellt.
Wenn Sie Java 7 oder Java 8 verwenden, sollten Sie die Verwendung unbedingt in Betracht ziehen
java.nio.file.Path
.Path.resolve
kann verwendet werden, um einen Pfad mit einem anderen oder mit einer Zeichenfolge zu kombinieren. DiePaths
Hilfsklasse ist auch nützlich. Zum Beispiel:Wenn Sie für Umgebungen vor Java-7 sorgen müssen, können Sie Folgendes verwenden
java.io.File
:Wenn Sie es später als Zeichenfolge zurückhaben möchten, können Sie es aufrufen
getPath()
. In der Tat, wenn Sie wirklich nachahmen wolltenPath.Combine
, könnten Sie einfach etwas schreiben wie:quelle
path2
(ignoriertpath1
), wennpath2
es sich um einen absoluten Pfad handelt. Die Java-Version löscht das führende/
oder\
und behandelt es als relativen Pfad.File.getCanonicalPath
.File
in C # erstellen, wenn Sie möchten. (Ich nehme an, Sie meinen, die Existenz vonFile
ist ein Vorteil, dem ich zustimmen würde.)In Java 7 sollten Sie Folgendes verwenden
resolve
:Während die NIO2 Path-Klasse für File mit einer unnötig anderen API etwas redundant erscheint, ist sie in der Tat subtil eleganter und robuster.
Beachten Sie, dass
Paths.get()
(wie von jemand anderem vorgeschlagen) keine Überlastung auftrittPath
, und dass diesPaths.get(path.toString(), childPath)
NICHT dasselbe ist wieresolve()
. Aus denPaths.get()
Dokumenten :Die Schwesterfunktion
resolve
ist die ausgezeichneterelativize
:quelle
Die Hauptantwort ist die Verwendung von Dateiobjekten. Allerdings Commons IO hat eine Klasse FilenameUtils , die diese Art der Sache tun, wie die concat () Methode.
quelle
Ich weiß, dass es lange her ist, dass Jon ursprünglich geantwortet hat, aber ich hatte eine ähnliche Anforderung wie das OP.
Um Jons Lösung zu erweitern, habe ich Folgendes gefunden: Für ein oder mehrere Pfadsegmente werden so viele Pfadsegmente verwendet, wie Sie darauf werfen können.
Verwendungszweck
Code hier für andere mit einem ähnlichen Problem
quelle
Plattformunabhängiger Ansatz (verwendet File.separator, dh funktioniert funktioniert abhängig vom Betriebssystem, auf dem der Code ausgeführt wird:
quelle
Um die Antwort von JodaStephen zu verbessern, verfügt Apache Commons IO über FilenameUtils, das dies tut. Beispiel (unter Linux):
Es ist plattformunabhängig und produziert alle Separatoren, die Ihr System benötigt.
quelle
Hier ist eine Lösung, die mehrere Pfadteile und Randbedingungen behandelt:
quelle
Wenn Sie nicht mehr als Zeichenfolgen benötigen, können Sie com.google.common.io.Files verwenden
bekommen
quelle
Vielleicht zu spät zur Party, aber ich wollte meine Meinung dazu mitteilen. Ich verwende ein Builder-Muster und erlaube bequem verkettete
append
Anrufe. Es kann leicht erweitert werden, um auch das Arbeiten mitPath
Objekten zu unterstützen .Anwendungsbeispiel:
Das Ergebnis
absolute
enthält Folgendes:oder vielleicht sogar:
quelle
Dies funktioniert auch in Java 8:
quelle
Diese Lösung bietet eine Schnittstelle zum Verbinden von Pfadfragmenten aus einem String [] -Array. Es verwendet java.io.File.File (String parent, String child) :
Dann können Sie einfach tun:
Kehrt zurück:
quelle