使用java.io.File时出现NullPointerException

我试图使用这个程序来计算D:\驱动器中的所有文件,但是当我运行它时它会抛出exception。

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 ++; } } } } } 

File.listFiles()不保证返回非null值。 这往往会发生(根据我的经验),因为Java可以看到看起来像目录的东西,但是无法列出它(连接点会浮现在脑海中)

甚至是javadoc

 f.listFiles() 

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

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

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

更换:

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

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

我将驱动器更改为D(因为我没有E驱动器),并且使用此修复程序在我的机器上成功完成了程序。

尝试“E:\\”进入目录。 我认为它应该工作。