java如何计算目录和子目录中的大量文件(如根C://或D://)
我正在写一个代码来计算文件夹及其子文件夹中具有特定扩展名的文件。当我从中小型文件夹计数时,这段代码运行良好
如果我从根开始计数,问题就开始了,例如从D://。它将持续一段时间,但在中间停止。我假设代码不能有效地读取大量文件和文件夹
public static int countFiles(File directory, String ext) {
int count = 0;
for(File file : directory.listFiles()) {
System.out.println(file);
if(file.isDirectory()) {
count += countFiles(file, ext);
}
String textFile = file.toString();
if(textFile.endsWith(ext)){
count++;
}
}
出现错误
屏幕截图行错误
- 这是我的完整代码CLICK HERE
# 1 楼答案
我只需在countFiles的开头检查null
如果要对整个文件系统进行大规模递归扫描,则在调用
countFiles(file, exts);
和调用directory.listFiles()
之间,目录可能不再存在# 2 楼答案
我认为正在发生的是
directory.listFiles()
返回null尽管文档中没有提到,但如果您没有足够的访问权限列出目录内容,可能会发生这种情况。如下图所示,您可以非常轻松地修复此问题
此外,还有一个轻微的逻辑错误(例如)一个名为
Files ending with .xls
的目录也可以算作一个文件,而它显然不是。我也解决了这个问题