问题遇到的现象和发生背景
在上课用课件代码也就是最常见的代码遍历文件时,如果遍历盘符就会报空指针异常。自己按另一个思路写了一下没有爆出异常,但是代码结构都是差不多的,想知道为什么
问题相关代码,请勿粘贴截图
public static void main(String[] args) {
long l = System.nanoTime();
Set<String> fileSet=new HashSet<>();
List<File> method = method(new File("D:\\Develop"));
System.out.println(method.size());
for (File file : method) {
if (file.getName().contains(".")) {
String[] split = file.getName().split("\\.");
fileSet.add(split[1]);
}
}
Map<String,Integer> fileMap=new HashMap<>();
for (String s : fileSet) {
fileMap.put(s,0);
}
for (File file : method) {
if (file.getName().contains(".")) {
String[] split = file.getName().split("\\.");
fileMap.put(split[1],fileMap.get(split[1])+1);
}
}
System.out.println(fileSet.size());
System.out.println(fileMap.size());
fileMap.entrySet().stream().sorted((a,b)->b.getValue()-a.getValue()).forEach((a)-> System.out.println(a.getKey()+"类型的文件有"+a.getValue()+"个"));
long l1=System.nanoTime();
System.out.println(l1-l);
}
static ArrayList<File> fileList = new ArrayList();
static List<File> method(File file) {
for (File listFile : file.listFiles()) {
if (listFile.isFile()) {
fileList.add(listFile);
} else {
if (listFile.listFiles() != null) {
method(listFile);
}
}
}
return fileList;
}
运行结果及报错内容
我的解答思路和尝试过的方法
不直接修改map集合,用Set集合存储后缀文件类型,再给到map集合获取集合大小,最后改变值达到目的