【发布时间】:2012-09-07 01:23:12
【问题描述】:
我正在尝试在 Android 上开发一个安全应用程序,我想遍历特定目录的文件名,以便比较目录中每个文件的哈希值。
我已经知道如何进行散列,但对于迭代部分,我对它的工作原理感到困惑。
【问题讨论】:
我正在尝试在 Android 上开发一个安全应用程序,我想遍历特定目录的文件名,以便比较目录中每个文件的哈希值。
我已经知道如何进行散列,但对于迭代部分,我对它的工作原理感到困惑。
【问题讨论】:
你的意思是要递归遍历一个目录?
类似这样的:
public void traverse (File dir) {
if (dir.exists()) {
File[] files = dir.listFiles();
if (files != null) {
for (int i = 0; i < files.length; ++i) {
File file = files[i];
if (file.isDirectory()) {
traverse(file);
} else {
// do something here with the file
}
}
}
}
}
【讨论】:
File对象都已经分配在堆上,循环内的file变量只是一个参考坐在堆栈上,从循环内外声明file变量的代码生成的字节码,我只能看到变量的堆栈槽号不同。始终在可能的最小范围内声明变量,可读性远比提高效率更重要。
for循环之前检查files!=null,否则你会得到一个NullPointerException。