☆K★Jade 2022-03-18 09:01 采纳率: 0%
浏览 51
已结题

为什么我这样遍历文件的代码遍历盘符不会报空指针异常?(语言-java)

问题遇到的现象和发生背景

在上课用课件代码也就是最常见的代码遍历文件时,如果遍历盘符就会报空指针异常。自己按另一个思路写了一下没有爆出异常,但是代码结构都是差不多的,想知道为什么

问题相关代码,请勿粘贴截图
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集合获取集合大小,最后改变值达到目的

我想要达到的结果
  • 写回答

3条回答 默认 最新

  • CSDN专家-sinJack 2022-03-18 09:08
    关注

    因为遍历时存在空文件对象,导致空指针异常。
    对于报错的地方,进行为空判断就行。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月21日
  • 创建了问题 3月18日

悬赏问题

  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?
  • ¥50 复现论文;matlab代码编写
  • ¥30 echarts 3d地图怎么实现一进来页面散点数据和卡片一起轮播
  • ¥15 数字图像的降噪滤波增强
  • ¥15 心碎了,为啥我的神经网络训练的时候第二个批次反向传播会报错呀,第一个批次都没有问题
  • ¥15 MSR2680-XS路由器频繁卡顿问题
  • ¥15 VB6可以成功读取的文件,用C#读不了
  • ¥15 如何使用micpyhon解析Modbus RTU返回指定站号的湿度值,并确保正确?
  • ¥15 C++ 句柄后台鼠标拖动如何实现