双正斜杠//在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。打开输入流并读取它只会打印您的根目录列表。