以编程方式在Android中检索文件大小

时间:2018-05-08 02:45:16

标签: android file uri

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

注意:所有权限都已就位,我确实可以访问该文件。

1)使用文件长度

>>> mydigits = re.sub(r'\D', '', mystr)
>>> mydigits
'98198384669702977470'
>>> re.findall(r'.{10}', mydigits)
['9819838466', '9702977470']

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

2)使用光标

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

结果:

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();
}

我还有别的事吗?

3 个答案:

答案 0 :(得分:1)

在您发布的“使用游标”结果上,表明您使用的方案不正确:

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

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

首先,您需要检查方案,如果它是“文件”或“内容”,那么您将获得文件大小。我希望这段代码对您有所帮助:

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);
    }
}

答案 1 :(得分:0)

将您的if语句更改为:

String[] projection = { MediaStore.Files.FileColumns.SIZE };
Cursor cursor = contentResolver.query(uri, projection, null, null, null);

并为查询方法添加投影:

^

答案 2 :(得分:0)

尝试以下方法

格式化文件大小的方法

public static String formatSize(long size) {
    String suffix = null;

    if (size >= 1024) {
        suffix = " Bytes";
        size /= 1024;
        if (size >= 1024) {
            suffix = " MB";
            size /= 1024;
        }
    }
    StringBuilder resultBuffer = new StringBuilder(Long.toString(size));

    int commaOffset = resultBuffer.length() - 3;
    while (commaOffset > 0) {
        resultBuffer.insert(commaOffset, ',');
        commaOffset -= 3;
    }
    if (suffix != null) resultBuffer.append(suffix);
    return resultBuffer.toString();
}

并从存储中读取文件

 String pathname= Environment.getExternalStorageDirectory().getAbsolutePath();
 String fullpath= pathname + "/dummy2.pdf";
 File file=new File(fullpath);
 String size = formatSize(file.length());// this will give you the size of the file

希望它对你有所帮助。

快乐编码;)