【问题标题】:java URI with file:// only [closed]仅带有 file:// 的 java URI [关闭]
【发布时间】:2013-04-29 06:41:16
【问题描述】:

我想知道是否可以仅使用 file:// 创建一个 URI? 我试过了,但我得到了URISyntaxException

所以我的问题是为什么这适用于 URL 而不是 URI?

【问题讨论】:

  • @Baadshah 我在该链接中看不到这个问题的直接答案。
  • Baadshah 抱歉,但这个链接清楚地表明了我的问题是为什么 file:// 使用 url 而不是使用 uri

标签: java file uri


【解决方案1】:

双正斜杠//hierarchical part中的URI scheme中具有特殊含义

引用wikipedia

URI 的分层部分旨在保存本质上分层的标识信息。如果此部分以双正斜杠(“//”)开头,则后面是权限部分和路径。如果分层路径不以 ("//") 开头,则它只包含一个路径。

URI file:// 中的 hierarchical part 以双斜杠 // 开头。在这种情况下,在path 后面跟着一个可选的authority part

声明

URI uri = new URI("file://");

结果

java.net.URISyntaxException: Expected authority at index 7: file://

因为传递的字符串是violating,所以specification 是一个URI。

声明

URL url = new URL("file://");

不会抛出异常,但会失败,FileNotFoundExceptionwenn 试图打开输入流,因为没有指定路径。

如果您不想指定authority part,则必须根据规范完成此操作,这意味着您要么将其留空并在// 之后指定路径

URI uri = new URI("file:///");

或者只是不要在您的 URI 字符串中添加 // 并直接从路径开始

URI uri = new URI("file:/");

两者是等效的,将产生相同的 URL。打开输入流并读取它只会打印您的根目录列表。

【讨论】:

  • A4L 求你了!!!!我现在明白我的错误了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
相关资源
最近更新 更多