Gibt es ein Java-Äquivalent für System.IO.Path.Combine()
in C#/.NET? Oder irgendeinen Code, um dies zu erreichen?
Diese statische Methode kombiniert eine oder mehrere Zeichenketten zu einem Pfad.
Gibt es ein Java-Äquivalent für System.IO.Path.Combine()
in C#/.NET? Oder irgendeinen Code, um dies zu erreichen?
Diese statische Methode kombiniert eine oder mehrere Zeichenketten zu einem Pfad.
Um die Antwort von JodaStephen zu verbessern, hat Apache Commons IO FilenameUtils, das dies tut. Beispiel (unter Linux):
assert org.apache.commons.io.FilenameUtils.concat("/home/bob", "work\\stuff.log") == "/home/bob/work/stuff.log"
Es ist plattformunabhängig und produziert alle Separatoren, die Ihr System benötigt.
Vielleicht bin ich zu spät dran, aber ich wollte meine Meinung dazu mitteilen. Ich ziehe es vor, für so etwas nicht ganze Bibliotheken heranzuziehen. Stattdessen verwende ich ein Builder-Muster und erlaube bequem verkettete append(more)
Anrufe. Es erlaubt sogar das Mischen von File
et String
und kann leicht erweitert werden, um Folgendes zu unterstützen Path
auch. Außerdem werden die verschiedenen Pfadseparatoren sowohl unter Linux als auch unter Macintosh usw. automatisch korrekt behandelt.
public class Files {
public static class PathBuilder {
private File file;
private PathBuilder ( File root ) {
file = root;
}
private PathBuilder ( String root ) {
file = new File(root);
}
public PathBuilder append ( File more ) {
file = new File(file, more.getPath()) );
return this;
}
public PathBuilder append ( String more ) {
file = new File(file, more);
return this;
}
public File buildFile () {
return file;
}
}
public static PathBuilder buildPath ( File root ) {
return new PathBuilder(root);
}
public static PathBuilder buildPath ( String root ) {
return new PathBuilder(root);
}
}
Beispiel für die Verwendung:
File root = File.listRoots()[0];
String hello = "hello";
String world = "world";
String filename = "warez.lha";
File file = Files.buildPath(root).append(hello).append(world)
.append(filename).buildFile();
String absolute = file.getAbsolutePath();
Das Ergebnis absolute
wird etwas enthalten wie:
/hello/world/warez.lha
oder vielleicht sogar:
A:\hello\world\warez.lha
Wenn Sie nicht mehr als Zeichenketten benötigen, können Sie com.google.common.io.Files
Files.simplifyPath("some/prefix/with//extra///slashes" + "file//name")
zu erhalten
"some/prefix/with/extra/slashes/file/name"
Hier ist eine Lösung, die mit mehreren Pfadteilen und Randbedingungen umgehen kann:
public static String combinePaths(String ... paths)
{
if ( paths.length == 0)
{
return "";
}
File combined = new File(paths[0]);
int i = 1;
while ( i < paths.length)
{
combined = new File(combined, paths[i]);
++i;
}
return combined.getPath();
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
1 Stimmen
Diese SO könnte eine Frage helfen.