从uri尝试获取文件大小始终为零

时间:2019-05-10 14:21:06

标签: android kotlin

我正在使用GET_CONTENT获得uri,并且在Glide中用于显示图像时也可以使用。但是我没有得到文件大小。它始终显示为0。

我尝试使用File(uri.path).length()

 fun fileSize(uri: Uri){
        var a = File(uri.path).length()
    }

2 个答案:

答案 0 :(得分:0)

Uri不是文件。

添加DocumentFile的依赖项,例如androidx.documentfile:documentfile。然后,将代码替换为:

fun fileSize(uri: Uri){
    var a = DocumentFile.fromSingleUri(uri).length()
}

答案 1 :(得分:0)

File构造函数将文件系统路径名作为其参数。您给了它一个从URI提取的“路径”,它可能不是文件系统对象的路径名。 (可能是如果您使用的是file: URL,但您没有检查架构,所以不能确定。)

如果您的File对象具有不存在文件的路径名,那么当您调用File::length时,文档指出length()将返回零。


在Java世界中,您可以尝试以下操作:

URI uri = ...
File file = new File(uri);
long length = file.length();

但是,这仅在以下情况下有效:

  1. URI是具有file:模式的绝对URI。
  2. URI表示的文件存在于本地文件系统名称空间中。

(如果1.不为真,则出现异常。如果2.不为真,则结果为零。)

这也应该在Android平台上运行...无需添加任何额外的依赖项。