我在我的应用程序使用的库中遇到了一个错误。我已经将问题缩小到java.net.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 :(得分:3)
来自java.net.url页面:
应用程序还可以指定“相对URL”,仅包含 足够的信息来相对于另一个URL访问资源。 相对URL经常在HTML页面中使用。例如,如果 网址的内容:
http://java.sun.com/index.html
其中包含相对网址:
FAQ.html
这将是一个简写:
http://java.sun.com/FAQ.html
因此,通过从/
中删除尾随location
,您没有指定URL构造函数它是规范的根,而不是要连接的相对路径。< / p>