'java.lang.NullPointerException'错误的未知来源

时间:2011-08-08 22:55:58

标签: java

import java.io.File;


public class filesinDirectory {

public static void main(String[] args) {
    File path = new File("/home/vito/Desktop/Dir1");
    File[] files = path.listFiles();
    int length = files.length; // line 9

    for (int i = 0; i != length; i++) {
        if (files[i].isFile()) 
        System.out.println( i + ": " + files[i].getName());
    }
}
}

使用上面的代码,每次我尝试运行它时,我在第9行得到一个java.lang.NullPointerException错误。但是我不确定这个错误的来源是什么。

5 个答案:

答案 0 :(得分:5)

根据File.listFiles()的Javadocs:

  

如果此抽象路径名不表示目录,那么这个   method返回null。

因此,Java说/home/vito/Desktop/Dir1不是有效目录。你的大写错了吗?

答案 1 :(得分:3)

files为空。因此,当您调用其length属性时,您将获得NPE。

答案 2 :(得分:0)

根据java.io.File的javadocs:

  

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

之前的方法调用必须存在问题。

答案 3 :(得分:0)

好吧,让我们看看javadoc说的是什么

  

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

     

无法保证结果数组中的名称字符串将以任何特定顺序出现;特别是,它们不会保证按字母顺序出现。

     

返回:
  一组抽象路径名,表示此抽象路径名表示的目录中的文件和目录。如果目录为空,则数组将为空。 如果此抽象路径名不表示目录,或者发生I / O错误,则返回null。   抛出:
  SecurityException - 如果存在安全管理器且其SecurityManager.checkRead(java.lang.String)方法拒绝对目录的读访问权   以来:   1.2

答案 4 :(得分:0)

Javadoc说:

File.listFiles()

Returns:
    An array of abstract pathnames denoting the files and directories in the directory denoted by this abstract pathname. The array will be empty if the directory is empty. Returns null if this abstract pathname does not denote a directory, or 

如果发生I / O错误。

因此目录不存在或发生I / O错误。