Windowsネットワーク上のネットワーク共有からロードするファイルURLを使用して開かれたリソースがあります。 file:////remotemachine/my/path/spec.txt
。解決操作中のホスト名パスを削除するファイルURI
このファイルは、ロードする必要がある別のリソースへのパスを指定します。私はURI.resolve(String)
メソッドを使用してこのリソースへのURIを作成します。新しく作成されたファイルリソースには、リモートホストを示すために必要なスレーブが含まれていないため、この問題が発生しています。代わりに
file:////remotemachine/my/path/data.dat
の私が不足しているスラッシュは、ファイルがリソースが存在しないローカルマシンからロードされるようにしよう(また、パスをして)いることを意味
file:///remotemachine/my/path/data.dat
を取得します。
マシン名の代わりにIPアドレスを使用する場合も同様です。マップされたファイル名(例: file:///M:/path/spec.txt
の場合、リソースファイルは正しくfile:///M:/path/data.dat
に解決されます。また、httpプロトコルパスを使用する場合は、URIが正しく解決されます。
これはJavaのバグである場合、私は再びネットワーク共有のファイルURIを解決することに誤解があるかどうかを誰でも確認できますか?
私はまだファイルがあれば興味
private Tile(URI documentBase, XPath x, Node n) throws XPathExpressionException, IOException
{
boolean isRemoteHostFile = documentBase.getScheme().equals("file") &&
documentBase.getPath().startsWith("//");
String imagePath = (String) x.evaluate("FileName", n, XPathConstants.STRING);
imageURL = documentBase.resolve(imagePath).toURL();
if (isRemoteHostFile)
{
imageURL = new URL(imageURL.getProtocol()+":///"+imageURL.getPath());
}
}
しかし私の問題の修正を作ってみたコードの関連セクション
private Tile(URI documentBase, XPath x, Node n) throws XPathExpressionException, IOException
{
String imagePath = (String) x.evaluate("FileName", n, XPathConstants.STRING);
this.imageURL = documentBase.resolve(imagePath).toURL();
}
更新
:事はJavaのバグ、URIの問題、またはそれが自分のところでどのように機能するかという大きな誤解です。
あなたは健全性(UNIXスタイルのパス)と狂気(Windowsのファイル共有パス)との間のインターフェイスで綿密なビットを実行しています –
私はちょうど別の[質問]を見つけました(http://stackoverflow.com/questions/ 1878024/file-uris-and-slashes)を使用してください。 – Lance