确定Android上(平坦的,非嵌套的)目录大小的最快,最简单的方法是什么?使用File对象获取文件列表并对其进行枚举以计算大小是极其缓慢的-当然,有更好的方法吗?
(我知道我可以使用线程在后台计算大小,但是在这种情况下,这不是理想的解决方案)
我不知道这对你来说是否算是“非黑客”,但如果你不想重新发明轮子,你可以使用 Linux 命令du。这是其联机帮助页中的一个剪辑:
NAME
du - estimate file space usage
SYNOPSIS
du [OPTION]... [FILE]...
DESCRIPTION
Summarize disk usage of each FILE, recursively for directories.
Run Code Online (Sandbox Code Playgroud)
-c特别是您应该感兴趣的参数-s:
$ du -sc /tmp
164 /tmp
164 total
$
Run Code Online (Sandbox Code Playgroud)
它输出的数字是目录中的总字节数。我不知道您是否想要以字节为单位的大小或人类可读的格式,但-h如果您也需要的话,可以为您提供。
您必须读取命令的输出。这个问题已经介绍了捕获命令输出,我将大量借用该问题来提供以下示例:
public String du(String fileName) {
Class<?> execClass = Class.forName("android.os.Exec");
Method createSubprocess = execClass.getMethod("createSubprocess", String.class, String.class, String.class, int[].class);
int[] pid = new int[1];
FileDescriptor fd = (FileDescriptor)createSubprocess.invoke(null, "/system/bin/du -sc", fileName, null, pid);
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fd)));
String output = "";
try {
String line;
while ((line = reader.readLine()) != null) {
output += line + "\n";
}
}
catch (IOException e) {}
return output;
}
Run Code Online (Sandbox Code Playgroud)
从那里,您需要解析代表总大小的数值的输出,我将其省略,因为它应该相当微不足道。或者,您可以将其放入du()函数中,并使函数返回 anint而不是 a String。
| 归档时间: |
|
| 查看次数: |
1021 次 |
| 最近记录: |