java.io.File 的 listFiles 方法抛出 NullPointerException

listFiles method of java.io.File throws NullPointerException

我正在 运行 使用此代码,它在 NetBeans IDE 中运行良好,但是一旦我构建了 JAR 文件并通过单击 运行 它,它就崩溃并抛出一个 NullPointerException

       String sepChar = File.separator;
        File homeFolder = new File(System.getProperty("user.dir"));
        File dataFolder = new File(homeFolder.getAbsolutePath() + sepChar + "Saved Images");
        System.err.println("data files is folder: "+dataFolder.isDirectory());
        System.err.println("data files is file: "+dataFolder.isFile());

        System.err.println("data files: "+dataFolder.listFiles());
        System.err.println("data folder: "+dataFolder);
        System.err.println("data folder path : "+dataFolder.getAbsolutePath());

File[]files = dataFolder.listFiles();
for(File f:files){...}

此代码在 for(File f:files) 上崩溃 该代码正在访问我的闪存驱动器上的一个文件夹,我检查了路径并且没有问题。

println 语句的输出如下所示: 第一组用于 IDE,第二组用于命令行:

IDE 输出:

data files is folder: true
data files is file: false
data files: [Ljava.io.File;@a298b7
data folder: F:\JambTextProject\Saved Images
data folder path : F:\JambTextProject\Saved Images

命令行输出(通过运行ning java -jar jarName.jar获得):

data files is folder: false
data files is file: false
data files: null
data folder: F:\JambTextProject\dist\Saved Images
data folder path : F:\JambTextProject\dist\Saved Images

那会是什么呢? 为什么代码 运行 在 IDE 中运行良好,但从 jar 中取出 运行 时却崩溃了? 闪存驱动器有 391 MB 可用空间 space,要访问的文件夹大小为 163 MB,而其在磁盘上的大小为 292 MB

根据File.listFiles的javadoc,方法:

Returns null if this abstract pathname does not denote a directory, or if an I/O error occurs.

因此,当您尝试迭代结果时,结果为 null,并发生 NullPointerException。

这意味着您的 IDE 设置与您的命令行不同,例如它有一个不同的工作目录。