使用java.io.File时出现NullPointerException

时间:2012-07-25 05:00:11

标签: java java-io

我正在尝试使用此程序来计算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 ++;
                }
            }
        }
    }
}

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

即使是

的javadoc
f.listFiles()

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

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

答案 2 :(得分:2)

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

替换:

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

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

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

答案 3 :(得分:0)

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