Подтвердить что ты не робот

Получить размер файла в android sdk?

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

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

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

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

Возможно, это проблема с разрешением? Есть что-то, чего я не вижу?

4b9b3361

Ответ 1

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

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

Как вы можете видеть, может быть возвращен ноль:

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

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

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

Ответ 2

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

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

Ответ 3

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

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

вместо:

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

Ответ 4

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

File file = new File(Environment.getExternalStorageDirectory().getPath() + "/lala.txt");
file.length()

Ответ 5

Perfeita solução.

Coloquei um GUID para direfenciar o arquivo e/1024.

//Кодиго Абаксо.

                long valueSize = downloadManager.getFile(apoio.getGuid() + "_" + apoio.getNomeArquivo()).length()/1024;

                String tamanhoFile = "";

                if(valueSize >= 1024) {
                    tamanhoFile = valueSize / 1024 + "MB";
                }else {
                    tamanhoFile = valueSize + "KB";
                }

                if(tamanhoFile.equals(apoio.getTamanhoArquivo())){
                    downloadManager.openFile(apoio.getUrl(), downloadManager.getFile(apoio.getGuid() + "_" + apoio.getNomeArquivo()));
                }else{
                    downloadManager.deleteFile(downloadManager.getFile(apoio.getGuid() + "_" + apoio.getNomeArquivo()));
                    onDownload(holder, apoio);
                }

            }