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

时间:2015-10-12 16:51:19

标签: java file usb-drive

我正在运行此代码,它在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 staments的输出如下所示: 第一组用于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

命令行输出(通过运行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可用空间,要访问的文件夹大小为163 MB,而磁盘大小为292 MB

1 个答案:

答案 0 :(得分:1)

根据File.listFiles的javadoc,方法:

  

如果此抽象路径名不表示目录,或者发生I / O错误,则返回null。

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

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