2009-12-10 4 views
13

Eine Anwendung, an der ich arbeite, umfasst den Zugriff auf Dateien im Netzwerk Dateifreigaben, und wir verwenden URIs, um die Speicherorte der Dateien anzugeben.Datei: URIs und Schrägstriche

Mein Verständnis der Datei: URI ist, dass sie die Form file:// + Pfad annehmen sollten. Im Fall einer Windows-Netzwerkfreigabe sieht dieser Pfad etwa wie folgt aus: \\servername\dir\file, daher wird der resultierende URI file:////servername/dir/file.

Das scheint für Javas URI class großartig zu funktionieren, aber die Win32-API scheint einen file://servername/dir/file Style-URI zu haben, den Java ablehnt, weil er "eine Autoritätskomponente" hat.

Ich verstehe Netzwerk-Freigabe-URIs richtig? Gibt es eine andere Möglichkeit, einen Pfad anzugeben, ohne dass sich Java über die Autorität beschwert?

Edit: Wir hofften in der Lage sein, Pfade als URIs zu speichern, um den Schema-Teil des URI zu verwenden, um andere Orte anzugeben (z. B. Datei: versus andere :). Aber wie erwähnt, es sieht aus wie Java nur seine eigenen Probleme mit URIs haben ...

Antwort

14

Es scheint, dass Java is wrong:

Falsch: file:////applib/products/a%2Db/abc%5F9/4148.920a/media/start.swf
Richtig: file://applib/products/a-b/abc_9/4148.920a/media/start.swf

On UNC paths in Java:

Die URI-Klasse behandelt UNC-Pfade reasonab gut, aber hat ein paar Probleme. In der Java-Klassenbibliotheken ist die String-Darstellung eines UNC-Pfad wie folgt:

new File("//SERVER/some/path").toURI().toString() 
               -> "file:////SERVER/some/path 

Mit anderen Worten, die URI den gesamten UNC-Pfad in der Pfadkomponente des URI speichert, und verlässt den Server/Behörde Komponente leer. Solange Sie diese Zeichenfolgendarstellung konsistent verwenden, können Sie erfolgreich mit java.net.URI interagieren.

+0

Vielen Dank für Ihre schnelle Antwort. Der zweite Link war besonders hilfreich. Während es für mich Sinn machte, dass der gesamte Pfad im "Pfad" -Segment des URIs gespeichert würde, kann ich sehen, dass Java dies etwas uneinheitlich tut, also werde ich darauf achten, darauf zu achten. – Sammy1Am

+0

Tatsächlich, so weit ich weiß, erfordert das Datei-URL-Schema nicht einmal den doppelten Schrägstrich, sondern nur einen einzigen Schrägstrich. In der Wildnis sind beide oft zu sehen. – hippietrail

+0

https://tools.ietf.org/html/rfc3986#section-3 "Wenn keine Berechtigung vorhanden ist, kann der Pfad nicht mit zwei Schrägstrichzeichen beginnen" –