chunaife 2013-04-25 16:11
浏览 590
已采纳

java遍历文件时提示空指针错误

import java.io.*;
public class FileList
{
public static int fileTotalNum = 0; //文件总数
public static int directoryNum = 0; //文件夹总数

public void FList(File f)
{
    String[] s = f.list();
    fileTotalNum+=s.length;

    for(int i = 0;i < s.length;i++)
    {
        File filelist = new File(f.getPath()+s[i]);
        if(filelist.isDirectory())
        {

            directoryNum++;
            FList(filelist);
        }
    }
}

public static void main(String[] args)
{
    File file = new File("C:\\");
    FileList fl = new FileList();
    fl.FList(file);
    System.out.println("一共有文件:"+fileTotalNum);
}

}

执行以上代码后提示空指针错误,具体如下:
Exception in thread "main" java.lang.NullPointerException
at FileList.FList(FileList.java:10)
at FileList.FList(FileList.java:19)
at FileList.main(FileList.java:28)

大家,知道,这是为什么吗?谢谢了

  • 写回答

3条回答 默认 最新

  • yunzhu666 2013-04-25 16:29
    关注

    是在这行报错的:
    [color=red]fileTotalNum += s.length;[/color]
    要先判断一下:
    if (s != null)

    [b]原因:[/b]
    因为遍历到C盘下的“System Volume Information”目录时,这是每个分区下都有的系统目录,用户没有访问权限,所以调用listFiles方法会返回null。

    [b]JDK文档中关于listFiles方法:[/b]
    抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录。如果目录为空,那么数组也将为空。[color=red]如果抽象路径名不表示一个目录,或者发生 I/O 错误,则返回 null[/color]。

    PS:
    要养成良好的编码习惯,这是刚开始入行时就需要放在头一位的任务,技术可以放在其次,学习的时间长着呢。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥120 目前wxid加好友的渠道都被和谐了吗
  • ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
  • ¥15 资源泄露软件闪退怎么解决?
  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出