我正在寻找一种阅读“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/