2

次のコードがあるとします。

class testurl
{
    public void test()
    {
        try {
            URL url1 = new URL("file:../../foo/bar/");
            URL url2 = new URL(url1, "file.txt");

            URL url3 = new URL("file:../../../../foo/bar/");
            URL url4 = new URL(url3, "file.txt");

            URL url5 = new URL("file:../../../../../foo/bar/");
            URL url6 = new URL(url5, "file.txt");

            System.out.println("url1: " + url1.toString());
            System.out.println("url2: " + url2.toString());
            System.out.println("url3: " + url3.toString());
            System.out.println("url4: " + url4.toString());
            System.out.println("url5: " + url5.toString());
            System.out.println("url6: " + url6.toString());
        }
        catch (MalformedURLException ex) {
            System.out.println("MalformedURLException Exception:");
            System.out.println(ex);
        }
    }

    public static void main(String[] args)
    {
        testurl obj = new testurl();
        obj.test();
    }
}

次の出力が表示されます。

url1: file:../../foo/bar/
url2: file:../../foo/bar/file.txt
url3: file:../../../../foo/bar/
url4: file:../../foo/bar/file.txt
url5: file:../../../../../foo/bar/
url6: file:../foo/bar/file.txt

'file' プロトコルを使用して URL オブジェクトのパスに 2 つ以上の '../' 相対ディレクトリを移動すると、URL クラスがパスの一部を削除しているように見えます。

URL(URL, String)

コンストラクターでは、パスの一部が構築中に削除されます。URL のfile:の後に「//」を使用してみましたが、違いはありません。

私は何か間違ったことをしていますか?それともこれは設計どおりに機能していますか? もしそうなら、URL オブジェクトのgetPathまたはgetFileメソッドを使用して最初に分解せずに、URL のファイル部分を追加/置換することは可能ですか?

それは、私が使用しているコンストラクターが行うように設計されていることではありませんか?

私は Java トレイルをチェックしました: http://docs.oracle.com/javase/tutorial/networking/urls/creatingUrls.html とそれは言う:

You can create URL objects for these pages relative to their common base
URL:http://example.com/pages/ like this:

URL myURL = new URL("http://example.com/pages/");
URL page1URL = new URL(myURL, "page1.html");
URL page2URL = new URL(myURL, "page2.html");

だから、私はそれを期待どおりに使用しているようです。

4

0 に答える 0