当前位置: 首页 > 知识库问答 >
问题:

使用java.io.文件时为NullPointer异常

濮阳驰
2023-03-14

我正在尝试使用此程序来计算 D:\ 中的所有文件驱动器,但当我运行它时它抛出异常。

package lmh;

import java.io.File;

public class FileList {

    static int fileNum = 0;
    static int directoryNum = 0;
    static int cannotRead = 0;

    public static void main(String[] args) {
        File f = new File("e:/");
        printFileStructure(f);
        System.out.println("result:");
        System.out.println("file number:" + fileNum);
        System.out.println("directory number:" + directoryNum);
        System.out.println("cannot rend:" + cannotRead);
    }

    public static void printFileStructure(File f) {
        File[] files = f.listFiles();
        for (int i = 0; i < files.length; i++) {
            if (files[i].isFile()) {
                if (files[i].canRead()) {
                    fileNum++;
                    System.out.println(files[i].getName());
                } else {
                    cannotRead ++;
                } 
            }
            else if (files[i].isDirectory()) {
                if (files[i].canRead()) {
                    directoryNum++;
                    printFileStructure(files[i]);
                } else {
                    cannotRead ++;
                }
            }
        }
    }
}

共有3个答案

松昱
2023-03-14

出于MadProgrammer指出的原因,添加一个空检查。

取代:

for (int i = 0; i < files.length; i++) {

if(files != null)
    for (int i = 0; i < files.length; i++) {

我将驱动器更改为D(因为我没有E驱动器),并且该程序通过此修复程序在我的计算机上成功完成。

邓仲卿
2023-03-14

即使是javadoc的

f.listFiles()

说。。。如果此抽象路径名不表示目录,则此方法返回 null。否则,将返回一个 File 对象数组,每个文件或目录中每个目录对应一个对象数组。表示目录本身和目录的父目录的路径名不包括在结果中。每个生成的抽象路径名都是使用 File(File, String) 构造函数从此抽象路径名构造的。因此,如果此路径名是绝对的,则每个生成的路径名都是绝对的;如果此路径名是相对的,则每个生成的路径名将相对于同一目录。

所以我相信这是罪魁祸首。

崔宜修
2023-03-14

File.listFiles() 不保证返回非空值。这往往会发生(根据我的经验),因为 Java 可以看到看起来像目录的内容,但无法列出它(想到联结)

 类似资料:
  • 问题内容: 所以我的Android Gallery中有3个文件夹。我正在尝试将这些文件夹的文件读入File数组,然后从那里将图像源转换为real 。 我的问题是引用文件数组时遇到问题。这是一些代码: 使用这些图像文件数组… 我的CreateList方法。错误是当我引用list.length时。 就像我说的那样,错误是当我使用list.length引用一个File数组时,例如我在第一个代码段中创建的

  • 问题内容: 我遇到了非常奇怪的Java行为,但我不知道这是一个bug,还是我错过了一些东西。 该代码只需遍历stateStack(LinkedList)列表并销毁所有状态。 引发了以下异常: 该代码通常可以正常工作,并且已经投入生产一年多了。 这可能是Java错误吗? / 更新 / destroy()调用不会修改stateStack。如果可以的话,我猜Java会抛出ConcurrentModifi

  • 我使用下面的命令进行了mockito-junit测试。变量serviceTask是接口的实例,称为serviceTask。我在申报中使用了@Mock 声明: 命令行: 堆栈跟踪: Java语言lang.NullPointerException在sun。反映NativeMethodAccessorImpl。sun上的invoke0(本机方法)。反映NativeMethodAccessorImpl。在

  • 问题内容: 当我尝试运行项目时,Tomcat返回异常。 有人可以帮助解决这个问题吗?配置类:https : //github.com/intrade/inventory/blob/master/src/main/java/com/springapp/mvc/InitApp/SecurityConfig.java 堆栈跟踪: 安全过滤器出现问题。项目链接:GitHub 问题答案: 该问题与SEC-2

  • java.lang.NullPointerException位于java.nio.file.files.provider(files.java:97),位于java.nio.file.files.newDirectoryStream(files.java:457),位于java.nio.file.files.list(files.java:3451),位于com.classtotestStutes