Nehmen wir zum Beispiel an, ich hätte es so, dass alle meine Dateien von einem Windows-Computer auf einen Unix-Computer übertragen werden: C:\test\myFile.txt
nach {somewhere}/test/myFile.txt
(Laufwerksbuchstabe ist an dieser Stelle irrelevant).
Gegenwärtig bietet unsere selbst geschriebene Utility-Bibliothek eine Methode, mit der alle Back-Slashes durch Forward-Slashes ersetzt werden können:
public String normalizePath(String path) {
return path.replaceAll("\\", "/");
}
Schrägstriche sind reserviert und können nicht Teil eines Dateinamens sein, daher sollte die Verzeichnisstruktur beibehalten werden. Ich bin mir jedoch nicht sicher, ob es andere Komplikationen zwischen Windows- und Unix-Pfaden gibt, über die ich mir Sorgen machen muss (z. B. Nicht-ASCII-Namen usw.).
java
file-systems
MxLDevs
quelle
quelle
/foo\\bar
ist nicht gleichbedeutend mit/foo/bar
unter Linux.Antworten:
Ja, wenn Sie den Austausch nur unter Windows ausführen und ihn deaktivieren, wenn Sie auf anderen Systemen ausgeführt werden.
Das Ersetzen auf Unix-ähnlichen Systemen ist falsch, da
\
es sich auf Unix-ähnlichen Plattformen um ein gültiges Zeichen in einem Datei- oder Verzeichnisnamen handelt. Auf diesen Plattformen sind nurNUL
und/
in Datei- und Verzeichnisnamen verboten.Außerdem erlauben einige Windows-API-Funktionen (meistens die niedrigeren) die Verwendung von Schrägstrichen nicht - mit ihnen müssen Backslashes verwendet werden.
quelle
Ja, aber das Ganze ist ein strittiger Punkt. Java konvertiert unter Windows Schrägstriche nahtlos in umgekehrte Schrägstriche. Sie können einfach Schrägstriche für alle Pfade verwenden, die fest codiert oder in der Konfiguration gespeichert sind. Dies funktioniert für beide Plattformen.
Ich persönlich verwende den Schrägstrich auch unter Windows immer, da er nicht das Escape-Zeichen ist. Unabhängig davon, ob der Rohpfad im Code enthalten ist oder in einer Eigenschaftendatei ausgelagert wurde, codiere ich ihn auf die gleiche Weise.
Versuch es! Dies funktioniert in Windows. Ändern Sie den tatsächlichen Pfad in einen vorhandenen Pfad, und Ihr Benutzer hat die Berechtigung zum Lesen.
Bonus: Sie können sogar Schrägstriche auf dem gleichen Weg mischen !
quelle
COMMAND.COM
Interpreter hatten eine Laufzeitpräferenz: Sie konnten konfigurieren, welche Schrägstriche der Interpreter zum Drucken und Parsen verwenden würde.Eine weitere Schwierigkeit bei Windows ist, dass es neben den herkömmlichen Laufwerksbuchstaben auch die UNC-Notation unterstützt.
Auf eine Datei auf einem entfernten Dateiserver kann zugegriffen werden als
\\server\sharename\path\filename
.quelle
Nein. Es gibt weit mehr zu bedenken als nur das Pfadtrennzeichen (das "\ vs /"). Wie Rob Y erwähnt, gibt es die Art und Weise, wie mit Leerzeichen umgegangen wird, und ihre Häufigkeit bei der Verwendung von Windows. In beiden Umgebungen gibt es unterschiedliche unzulässige Zeichen. Es gibt die Bereitschaft von Unix, fast alles zuzulassen, wenn ein führendes "\" entgeht. Windows verwendet "", um eingebettete Leerzeichen zu verarbeiten. Windows verwendet UCS-16 und Unix ASCII oder UTF-8.
usw. , usw. , usw.
Aber für viele Anwendungen , die Einschränkungen für die Pfadnamen sie benötigen , setzen können zu manipulieren, können Sie es tatsächlich tun , so wie Sie vorschlagen. Und es wird zumindest in einer großen Anzahl von Fällen funktionieren, nur nicht in allen.
quelle
Jedes Microsoft-Betriebssystem, das mit MS-DOS beginnt, hat auf Kernel-Ebene sowohl Schrägstriche als auch umgekehrte Schrägstriche verstanden .
Daher können Sie unter Windows zwischen ihnen frei konvertieren. beide haben den gleichen Status wie reservierte Trennzeichen. In jedem gültigen Pfad können Sie umgekehrte Schrägstriche durch Schrägstriche ersetzen und umgekehrt, ohne die Bedeutung für den Kernel zu ändern.
In früheren DOS-Versionen hat der
command.com
Interpreter von Microsoft festgelegt, welcher Schrägstrich zum Anzeigen und Parsen von Pfaden verwendet wird. Das wurde schließlich entfernt.Einige User-Space-Programme in Windows wie die Windows-Shell (
explorer.exe
) mögen keine Schrägstriche. Das ist nur mühselige Programmierung in diesen Programmen.quelle