Получить размер файла в Android SDK? - PullRequest
70 голосов
/ 20 августа 2011

У меня проблема с получением размера файла. У меня есть следующий код:

File file = new File("/sdcard/lala.txt");
long length = file.length();

И всегда длина равна нулю, да ноль.

Я использую Android SDK (не знаю, какая версия), код выполняется внутри Activity, я создал SDCard.

Возможно, это вопрос разрешения? Что-то мне не хватает?

Ответы [ 4 ]

88 голосов
/ 20 августа 2011

Метод File.length() возвращает следующее в соответствии с javadoc :

"Длина в байтах файла, обозначенного этим абстрактным путем, или 0L, если файл не существует. Некоторые операционные системы могут возвращать 0L для имен путей, обозначающих зависимые от системы объекты, такие как устройства или каналы. «

Как видите, можно вернуть ноль:

  • если файл существует, но содержит ноль байтов.
  • , если файл не существует, или
  • , если файл является специальным файлом для конкретной ОС.

Мои деньги на втором случае; то есть, у вас неправильное имя файла / путь. Попробуйте позвонить File.exists() по имени файла, чтобы увидеть, что это говорит вам. Думаю, возможны и два других случая.

(Для справки, большинство /proc/... файлов в системе на основе Linux также имеют кажущийся размер файла ноль. А Android на основе Linux.)

24 голосов
/ 09 мая 2014

Если вы хотите получить размер папки / файла в единицах КБ или МБ , используйте следующий код. Это поможет найти точный размер вашего файла.

public static String getFolderSizeLabel(File file) {
    long size = getFolderSize(file) / 1024; // Get size and convert bytes into Kb.
    if (size >= 1024) {
        return (size / 1024) + " Mb";
    } else {
        return size + " Kb";
    }
}

Эта функция возвращает размер в виде байтов:

public static long getFolderSize(File file) {
    long size = 0;
    if (file.isDirectory()) {
        for (File child : file.listFiles()) {    
            size += getFolderSize(child);
        }
    } else {
        size = file.length();
    }
    return size;
}   
4 голосов
/ 27 февраля 2016

Вы должны использовать:

File file = new File(Uri.parse("/sdcard/lala.txt").getPath());

вместо:

File file = new File("/sdcard/lala.txt");
1 голос
/ 03 мая 2019

Я бы предложил вам использовать следующий код вместо жесткого кодирования пути ("/sdcard/lala.txt"):

File file = new File(Environment.getExternalStorageDirectory().getPath() + "/lala.txt");
file.length()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...