Получить размер файла в Android программно - PullRequest
0 голосов
/ 08 мая 2018

Я ищу способ прочитать размер 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));

РЕЗУЛЬТАТ: Работает с изображениями, но возвращает 0 в файлах pdf

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

Есть ли что-то еще, что я должен сделать?

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Попробуйте следующий метод

метод для форматирования размера файла

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

Надеюсь, это поможет вам.

Happy Coding;)

0 голосов
/ 08 мая 2018

Измените выражение if на:

if (cursor != null && cursor.moveToFirst() )

, а также добавьте прогноз для вашего метода запроса:

String[] projection = { MediaStore.Files.FileColumns.SIZE };
Cursor cursor = contentResolver.query(uri, projection, null, null, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...