如何确定路径是否是本地文件

Chr*_*son 16 java android

只给出一个字符串的位置,是否有一种可靠的方法来确定这是一个本地文件(例如/mnt/sdcard/test.jpg)还是远程资源(例如http://www.xyz.com/) test.jpg)?

用Uri.parse将它转换为Uri似乎没有给我任何东西来指示文件的位置.

我真的不想在字符串中查找//!

Cam*_*ham 20

您也可以查看android.webkit.URLUtil课程

URLUtil.isFileUrl(file)
Run Code Online (Sandbox Code Playgroud)

  • 但``URLUtil.isFileUrl("/ mnt/sdcard/somefile.txt")`返回`false`. (5认同)
  • 这个答案已经过时了,因为我们有了新的 FileProvider api,并且本地文件可能存在于内容 URI 中。`isFileUrl()` 不检查 url 是否以 `content:` 开头 (3认同)

小智 8

uri格式是

<protocol>://<server:port>/<path>
Run Code Online (Sandbox Code Playgroud)

本地文件有:

file:///mnt/...
Run Code Online (Sandbox Code Playgroud)

要不就

 /mnt
Run Code Online (Sandbox Code Playgroud)

所以如果字符串开头

\w+?://
Run Code Online (Sandbox Code Playgroud)

这不是file://那么这是url


Yos*_*sef 5

我也遇到了同样的问题,并尝试使用 Penkov Vladimir 解决方案,但它没有用,因为 Uri 的“内容”模式也不是远程资源。

我使用了以下代码,效果很好。

List<Uri> urls = new ArrayList<>();
List<Uri> locals = new ArrayList<>();
for (Uri uri : uris) {
    if (uri.getScheme() != null && (uri.getScheme().equals("content") || uri.getScheme().equals("file"))) {
        locals.add(uri);
    } else {
        urls.add(uri);
    }
}
Run Code Online (Sandbox Code Playgroud)