我不知道这对你来说是否属于“非黑客”,但如果你不想重新发明轮子,你可以使用 Linux 命令du。这是来自其manpage的剪辑:
NAME
du - estimate file space usage
SYNOPSIS
du [OPTION]... [FILE]...
DESCRIPTION
Summarize disk usage of each FILE, recursively for directories.
您应该对参数-c 和-s 感兴趣:
$ du -sc /tmp
164 /tmp
164 total
$
它输出的数字是目录中的总字节数。我不知道您是否想要字节大小或人类可读格式的大小,但如果您也需要,-h 可以为您提供。
您必须读取命令的输出。捕获命令输出已经在this question 中介绍过,我将从中大量借用以提供以下示例:
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;
}
从那里您需要解析输出以获取表示总大小的数值,我将其省略,因为它应该相当微不足道。或者,您可以将其放入 du() 函数中并让该函数返回 int 而不是 String。