android - 以编程方式检索 Android 中的文件大小

标签 android file uri

我正在寻找一种阅读“PDF”大小的方法。到目前为止,我已经尝试了以下方法:

注意:所有权限均已到位,我确实有权访问该文件。

1) 使用文件长度

path = "/storage/emulated/0/Download/c4611_sample_explain.pdf";
File file = new File(path);
int file_size = Integer.parseInt(String.valueOf(file.length() / 1024));

结果: 它适用于图像,但在 pdf 文件上返回 0

2) 使用光标

Uri uri = Uri.fromFile(new File(path));
Cursor cursor = contentResolver.query(uri, null, null, null, null);
String size= "null";
if (cursor != null) {
    size=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.SIZE));
    cursor.close();
}

结果:

size: null 
path: /storage/emulated/0/Download/c4611_sample_explain.pdf 
URI: file:///storage/emulated/0/Download/c4611_sample_explain.pdf

UPDATE: Cursor returns null

还有什么我应该做的吗?

最佳答案

根据您发布的“使用光标”结果,您似乎使用了错误的方案:

URI: file:///storage/emulated/0/Download/c4611_sample_explain.pdf

如果您看到 URI 以“file:”开头,但使用光标方法,则 URI 必须以“content:”开头

首先需要检查scheme,如果是"file"或“内容”,则获取文件大小。我希望这段代码有帮助:

if (resultCode == RESULT_OK && data != null) {
    Uri filePath = data.getData();
    if (data.getData().getScheme().equals("file")) {
        File file = new File(filePath.toString());
        int fileSize = (int) file.length();
        System.out.println("This is the file size: " + fileSize);
    } else if (data.getData().getScheme().equals("content")) {
        Cursor returnCursor = this.getContentResolver().query(filePath, null, null, null, null);
        assert returnCursor != null;
        int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE);
        returnCursor.moveToFirst();
        String fileSize = returnCursor.getString(sizeIndex);
        System.out.println("This is the file size: " + fileSize);
    }
}

关于android - 以编程方式检索 Android 中的文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50225041/

相关文章:

android - 在 android 的控制台上显示 native 推送通知,但在设备或模拟器上不显示通知

java - 我们如何保存带有日期的文件?

c - 如何将文本文件的一部分复制到C中的字符串中?

android - 在 onActivityResult 中收到 "content://"Uri 后从 MediaStore 获取 PDF?

java - 在 Android 应用程序中进行地理编码

android - 带有溢出菜单的自定义操作栏布局

java - 如何检查一个文件是否在另一个文件中?

java - 在 java URI 中编码井号

java - InetAddresses 的 isInetAddress 和 isUriInetAddress 的区别

android - 不同layout xml中的id一定不一样吧?