16

私が実行しているシステムは、JRE 1.6 を搭載した Windows XP です。

私はこれをします :

public static void main(String[] args) {
    try {
        System.out.println(new File("C:\\test a.xml").toURI().toURL());
    } catch (Exception e) {
        e.printStackTrace();
    }       
}

そして私はこれを得る:file:/C:/test%20a.xml

指定された URL の の前に 2 つのスラッシュがないのはC:なぜですか? 私は期待しfile://C:...た。それは正常な動作ですか?


編集 :

Java ソース コードから: java.net.URLStreamHandler.toExternalForm(URL)

    result.append(":");
    if (u.getAuthority() != null && u.getAuthority().length() > 0) {
        result.append("//");
        result.append(u.getAuthority());
    }

ファイル URL の機関部分が null または空であるように見えるため、二重スラッシュがスキップされます。では、URL のオーソリティ部分とは何であり、ファイル プロトコルには実際に存在しないのでしょうか?

4

3 に答える 3

2

両方を持つことができる理由に答えるには:

file:/path/file
file:///path/file
file://localhost/path/file

RFC3986 (3.2.2. ホスト)は次のように述べています。

「URI スキームがホストのデフォルトを定義する場合、そのデフォルトは、ホスト サブコンポーネントが未定義の場合、または登録名が空 (長さゼロ) の場合に適用されます。たとえば、「ファイル」URI スキームは、権限、空のホスト、および "localhost" はすべてエンドユーザーのマシンを意味しますが、"http" スキームは権限の欠如または空のホストを無効と見なします。"

したがって、権限が空のホストであっても、「ファイル」スキームfile:///path/fileはエンドユーザーのマシンのコンテキストを持つように変換されます。

于 2012-01-21T21:55:59.293 に答える
1

ブラウザでの使用に関する限り、それは問題ではありません。私は通常見てきfile:///...ましたが、1 つ、2 つ、または 3 つの「/」はすべて機能します。これは、(Javaのドキュメントを見なくても)通常の動作だと思います。

于 2009-07-15T13:28:27.410 に答える