2012-02-25 47 views
1

我在应用程序正在使用的库中遇到了一个错误。我已经将问题缩小到java.net.URL类的行为以及图书馆如何使用它来查找资源。为什么java.io.URL去掉最后一个文件夹?

当我运行下面的代码,输出是file:/root/myfile.xml代替file:/root/folder/myfile.xml

public static void main(String[] args) throws MalformedURLException { 
    String location = "file:///root/folder"; 
    String spec = "myfile.xml"; 

    URL context = new URL(location); 
    URL url = new URL(context, spec); 

    System.out.println(url); 
} 

如果我在location附加一个斜杠,我会得到预期的输出。

我很好奇,为什么java.net.URL这样的表现?

+0

///可能工作更美好。 – bmargulies 2012-02-25 00:23:04

+0

@bmargulies谢谢。我更新了这个问题,虽然行为是一样的。 – AEW 2012-02-25 00:29:33

+0

我想你只需要在位置字符串的末尾保留'/'... – summea 2012-02-25 00:30:29

回答

3

从页面的java.net.URL:

应用程序也可以指定一个“相对URL”,它只包含 足够的信息,以达到资源相对于另一个URL。 相对URL经常在HTML页面中使用。例如,如果 的URL的内容:

http://java.sun.com/index.html 

内它包含的相对URL:

FAQ.html 

这将是一个速记:

http://java.sun.com/FAQ.html 

因此,通过从location离开过尾随/,你不是指定的URL构造函数,它是RO对于规范而言,而不是要加入的相对路径。

相关问题