首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java : Windows文件上的File.toURI().toURL()

Java : Windows文件上的File.toURI().toURL()
EN

Stack Overflow用户
提问于 2009-07-15 13:03:28
回答 3查看 27.1K关注 0票数 16

我运行的系统是Windows XP,带有JRE 1.6。

我这样做:

代码语言:javascript
复制
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在C:前面没有两个斜杠?我期待的是file://C:...。这是正常行为吗?

编辑:

来自Java源代码: java.net.URLStreamHandler.toExternalForm(URL)

代码语言:javascript
复制
    result.append(":");
    if (u.getAuthority() != null && u.getAuthority().length() > 0) {
        result.append("//");
        result.append(u.getAuthority());
    }

文件URL的Authority部分似乎为null或为空,因此跳过了双斜杠。那么,什么是URL的权限部分,它是否真的在文件协议中缺失?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-15 13:40:04

这是一个有趣的问题。

首先要做的是:我在JRE6上得到了同样的结果。当我去掉toURL()部分时,我甚至得到了它。

RFC2396实际上不需要两个斜杠。根据第3条:

URI语法取决于方案。通常,绝对URI的编写方式如下:

话虽如此,RFC2396已经被RFC3986取代,后者表示

通用URI语法由称为方案、授权、路径、查询和片段的组件的分层序列组成。

URI = scheme ":“hier-part "?”查询hier-part = "//“权限路径-abempty/路径-绝对/路径-无根/路径-空

方案和路径组件是必需的,但路径可能为空(无字符)。如果有权限,则路径必须为空或以斜杠("/")字符开头。当权限不存在时,路径不能以两个斜杠字符("//")开头。这些限制为路径产生了五个不同的ABNF规则(3.3节),其中只有一个与任何给定的URI引用相匹配。

所以,就是这样。由于文件URI没有权限段,因此禁止它们以//开头。

然而,RFC直到2005年才出现,而且Java引用了RFC2396,所以我不知道它为什么要遵循这种约定,因为新RFC之前文件URL总是有两个斜杠。

票数 12
EN

Stack Overflow用户

发布于 2012-01-22 05:55:59

要回答为什么你可以两者兼得:

代码语言:javascript
复制
file:/path/file
file:///path/file
file://localhost/path/file

RFC3986 (3.2.2. Host)声明:

“如果URI方案为主机定义了默认值,则当未定义主机子组件或注册名称为空(长度为零)时,该默认值适用。例如,定义”文件“URI方案时,没有颁发机构、空主机和"localhost”都表示最终用户的计算机,而"http“方案将缺少颁发机构或空主机视为无效。”

因此,“文件”方案将file:///path/file转换为具有最终用户机器的上下文,即使授权机构是空主机也是如此。

票数 2
EN

Stack Overflow用户

发布于 2009-07-15 13:28:27

就在浏览器中使用它而言,这并不重要。我通常会看到file:///...,但一个、两个或三个'/‘都可以工作。这让我认为(不看java文档)这是正常行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1131273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档