在安卓 sdk 中获取文件大小?

2022-08-31 12:36:53

我在获取文件大小时遇到问题。我有以下代码:

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

长度始终为零,是的,为零。

我正在使用Android SDK(不确定是什么版本),代码在活动内运行,我创建了一个SD卡。

也许这是一个权限问题?我错过了什么吗?


答案 1

该方法根据 javadoc 返回以下内容:File.length()

“由此抽象路径名表示的文件的长度(以字节为单位),如果文件不存在,则为 0L。某些操作系统可能会返回 0L 作为表示依赖于系统的实体(如设备或管道)的路径名。

如您所见,可以返回零:

  • 如果文件存在但包含零字节。
  • 如果文件不存在,或者
  • 如果文件是某个特定于操作系统的特殊文件。

我的钱在第二个案件上;即您有错误的文件名/路径名。尝试调用文件名,看看它告诉你什么。我想,另外两种情况也是可能的。File.exists()

(根据记录,基于 Linux 的系统上的大多数文件也具有明显的文件大小为零。Android是基于Linux的。/proc/...


答案 2

如果要以 KbMb 为单位获取文件夹/文件大小,请使用以下代码。它将有助于找到文件的准确大小。

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