2

我都试过了,都做了同样的事情。有什么区别(仅用于兴趣)?

我有一个加载本地数据的 WebView,并且能够交出这样的 URL。

例子:

webView.loadUrl("file://storage/emulated/0/folder1/folder2/hello.html"
4

3 回答 3

4

URL 定义的差异,其中架构与使用schema://. 接下来指定路径,如果路径是绝对路径,则它以/. Unix 上的正确 url

"file:///storage/emulated/0/folder1/folder2/hello.html"

但它可能在 Windows 上

"file://c:/storage/emulated/0/folder1/folder2/hello.html"
于 2014-08-17T22:05:23.447 回答
3

遵循规范file://storage/emulated/0/folder1/folder2/hello.html是无效的。storage这里应该代表一个主机名。

在使用文件 URI 方案时,您可以选择忽略表示路径的主机。这在我在下面引用的 wiki 页面上进行了描述。

文件 URI 采用以下形式

文件://主机/路径

其中,host 是可以访问路径的系统的完全限定域名,path 是目录/目录/.../name 形式的分层目录路径。如果省略主机,则将其视为“localhost”,即解释 URL 的机器。请注意,当省略主机时,斜杠不会被省略(“file:///foo.txt”有效,而“file://foo.txt”无效,尽管有些解释器设法处理后者)。

我的猜测是 webView.loadUrl 是宽松的,并且接受不符合规范的文件 URI。Uri.fromFile()还提供了正确格式的示例。

示例:“文件:///tmp/android.txt”

于 2014-08-17T22:30:00.540 回答
2

file://是一个 URL 前缀,就像http://or一样https://

如果您有三个斜杠,那么文件路径将/storage/emulated/...不是storage/emulated/...只有两个斜杠。

前者查找文件夹中调用storage/文件夹(根文件夹)并从那里继续。

后者应该在工作目录中查找一个名为的文件夹storage并从那里继续。我不确定为什么没有。

于 2014-08-17T22:05:37.087 回答