16

私が取り組んでいるアプリケーションには、ネットワーク ファイル共有上のファイルへのアクセスが含まれており、URI を使用してファイルの場所を指定しています。

file: URI についての私の理解は、file://+ pathの形式を取る必要があるということです。Windows ネットワーク共有の場合、このパスは のよう\\servername\dir\fileになるため、結果の URI は になりfile:////servername/dir/fileます。

これは Java のURI クラスに対してうまく機能しているように見えますが、Win32 API はfile://servername/dir/fileスタイル URI を必要としているようですが、Java は「権限コンポーネントを持っている」ため拒否します。

ネットワーク共有 URI を正しく理解していますか? Javaが権限について不平を言うことなくパスを指定する別の方法はありますか?

編集: URI のスキーム部分を使用して他の場所を指定できるように、パスを URI として保存できるようにしたいと考えていました (例: file: と other:)。しかし、指摘したように、Java には URI に関する独自の問題があるようです...

4

1 に答える 1

17

Javaが間違っているようです:

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

Java のUNCパス:

URI クラスは UNC パスを適切に処理しますが、いくつかの問題があります。Java クラス ライブラリでは、UNC パスの文字列表現は次のとおりです。

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

つまり、URI は UNC パス全体を URI のパス コンポーネントに格納し、サーバー/機関コンポーネントを空のままにします。この文字列表現を一貫して使用している限り、java.net.URI と正常に対話できます。

于 2009-12-10T01:15:58.623 に答える