Gibt es ein Java-Dienstprogramm, das einen String-Pfad konvertiert, um das richtige File-Trennzeichen zu verwenden?
Entwickelt ich eine Reihe von Klassen, die sich manipulieren-Dateien in Java. Ich arbeite auf einer Linux-box, und wurden selig Eingabe new File("path/to/some/file");
. Als es Zeit war, zu Begehen, erkannte ich einige der anderen Entwickler im Projekt mit Windows. Ich möchte nun eine Methode aufrufen, die in einem String der form "/path/to/some/file"
und, je nach OS, Rückkehr einen richtig getrennt Weg.
Beispielsweise:
"path/to/some/file"
wird "path\\to\\some\\file"
auf Windows.
Auf Linux-es gibt nur die angegebene Zeichenfolge.
Merke ich, es würde nicht lange dauern, um zu klopfen, bis ein regulärer Ausdruck, der dies tun könnte, aber ich bin nicht auf der Suche, das Rad neu zu erfinden, und würde es vorziehen, eine ordnungsgemäß geprüfte Lösung. Es wäre schön, wenn es wurde gebaut, um das JDK, aber wenn es Teil von etwas kleinen F/OSS-Bibliothek, ist es auch fein.
Gibt es also ein Java-Programm, mit dem konvertieren eine Zeichenfolge Weg, um die richtigen Datei-separator char?
InformationsquelleAutor der Frage Grundlefleck | 2009-11-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Apache Commons kommt zur Rettung (wieder). Die Commons-IO-Methode FileNameUtils.separatorsToSystem() wird tun, was Sie wollen.
Unnötig zu sagen, Apache Commons IO wird eine Menge mehr und ist einen Blick Wert.
InformationsquelleAutor der Antwort Brian Agnew
Einen
"/path/to/some/file"
eigentlich funktioniert unter Windows Vista und XP.Aber es ist immer noch nicht tragbar Windows mehrere Wurzeln. Also das root-Verzeichnis ausgewählt werden, in gewisser Weise. Es sollte kein problem mit relativen Pfaden.
Edit:
Apache commons io hat nicht helfen, mit anderen envs als unix & Fenster. Apache-io-source-code:
InformationsquelleAutor der Antwort Thomas Jung
Mit dem neuen Java 7, Sie haben eine Klasse namens Wege dies ermöglicht Ihnen, genau das zu tun, was Sie wollen (siehe http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html)
hier ist ein Beispiel:
InformationsquelleAutor der Antwort Gigas64
Dies ist, was Apache-commons-io hat, ausgerollt, in ein paar Zeilen code:
Also, wenn Sie wollen, um zu vermeiden, die zusätzliche Abhängigkeit, einfach.
InformationsquelleAutor der Antwort Daniel Winterstein
Haben Sie die Möglichkeit, mit
zu bauen, die den string für den Pfad?
InformationsquelleAutor der Antwort Adam
Für jeden, der versucht zu tun, diese 7 Jahre später, apache commons separatorsToSystem Methode wurde verschoben, um die FilenameUtils Klasse:
InformationsquelleAutor der Antwort java-addict301
Sollte es nicht genug sein zu sagen:
InformationsquelleAutor der Antwort Dimitri
Arbeitet perfekt mit Windows-zumindest, wenn auch mit gemischten Pfade, zum Beispiel
c:\users\username/myproject\myfiles/myfolder
wird
Leider noch nicht prüfen, was Linux machen würde, von der oben, aber es gibt wieder Linux-Datei-Struktur ist anders, so würden Sie nicht die Suche nach einem solchen Verzeichnis
InformationsquelleAutor der Antwort John Perczyk
Ich denke, es ist dieses Loch in Java Pfade.
String rootStorePath = Pfade.get("c:/projects/mystuff/").toString();
funktioniert, wenn Sie es läuft auf einem system, auf das Dateisystem, die Sie verwenden müssen. Wie wies darauf hin, es verwendet die aktuellen OS-Datei-system.
Brauche ich für die Arbeit mit Pfade zwischen windows und linux, sagen wir zum kopieren einer Datei von einem zum anderen. Während die Verwendung von "/" alle Werke, die ich denke, wenn Sie alle Java-Befehle, aber ich brauche, um ein sftp-Aufruf, so mit /oder Datei.separator etc... hilft mir nicht weiter. Ich kann nicht verwenden Pfad (), weil er wandelt mir die Standard-Datei-system läuft bei mir auf "jetzt".
Was Java benötigt wird:
`auf windows-system:
Pfad posixPath = Pfade.get("/home/mystuff", Dateisystem.Posix );
bleibt /home/mystuff/und nicht in \home\mystuff
auf linux-system:
String winPath = Pfade.get("c:\home\mystuff", Dateisystem.Windows).toString();`
bleibt c:\home\mystuff und nicht umgewandelt /c:/home/mystuff
ähnlich wie die Arbeit mit Zeichensätzen:
URLEncoder.encode( "was auch immer hier", "UTF-8" ).getBytes();
P. S. ich weiß auch nicht laden wollen ganze apache-io-jar-Datei, etwas einfaches zu machen. In diesem Fall werden Sie nicht haben, was ich sowieso vorschlagen.
InformationsquelleAutor der Antwort Stan Towianski