更好地理解Java概念:文件,异常处理

时间:2014-05-17 07:19:13

标签: java file exception-handling runtime-error

我想构建一个数据结构,我将存储文件系统中的所有文件。 为此,我有一个类directoryNode:

class directoryNode{
    private String name;
    private String path;
    File file;

    //This List Stores the sub-directories of the given Directory.

    private List<directoryNode> subDirectories = new ArrayList<directoryNode>();

    //This List stores the simple files of the given Directory

    private List<String> fileNames = new ArrayList<String>();

    //The Default Constructor.
    directoryNode(File directoryName){
        this.name = directoryName.getName();
        this.path = directoryName.getPath();
        this.file = directoryName;
        //A Function to build this directory.
        buildDirectory();
    }

    File[] filesFromThisDirectory;

    private void buildDirectory(){
        //get All the files from this directory
        filesFromThisDirectory = file.listFiles();
        try{
            for(int i = 0 ; i < filesFromThisDirectory.length ; i++){
                if(filesFromThisDirectory[i].isFile()){
                    this.fileNames.add(filesFromThisDirectory[i].getName());
                } else if(filesFromThisDirectory[i].isDirectory()){
                    directoryNode Dir = new directoryNode(filesFromThisDirectory[i]);
                    this.subDirectories.add(Dir);
                }
            }
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }
}

我的程序工作正常,但是当我在buildDirectory()函数中不使用try-Catch块时,我会遇到一些奇怪的行为。 Build Function recursilvely为代码中编写的文件列表构建结构。

当我这样做时:

directoryNode d1 = new directoryNode(new File("/"));

当try-Catch存在时,程序运行正常但是如果我删除了try catch块: 执行一段时间后我收到错误:我得到的错误是:

 Exception in thread "main" java.lang.NullPointerException
  at directoryNode.buildDirectory(myClass.java:47)
  at directoryNode.<init>(myClass.java:22)
  at directoryNode.buildDirectory(myClass.java:55)
  at directoryNode.<init>(myClass.java:22)
  at directoryNode.buildDirectory(myClass.java:55)
  at directoryNode.<init>(myClass.java:22)
  at myClass.main(myClass.java:75) 

但是当我跑步时:

  directoryNode d1 = new directoryNode(new File("/home/neeraj"));

有或没有try - catch块,我程序运行正常,没有任何错误。 为什么会这样?为什么在这些情况下我会得到不同的结果?

1 个答案:

答案 0 :(得分:1)

问题在于这一行:

    filesFromThisDirectory = file.listFiles();

如果File对象不是目录,则返回null ...如果是,但您没有必要的权限。

因此,在进入循环之前,必须检查filesFromThisDirectory是否为空。

但请帮自己一个忙,放弃File并改用java.nio.file