我想构建一个数据结构,我将存储文件系统中的所有文件。 为此,我有一个类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块,我程序运行正常,没有任何错误。 为什么会这样?为什么在这些情况下我会得到不同的结果?
答案 0 :(得分:1)
问题在于这一行:
filesFromThisDirectory = file.listFiles();
如果File
对象不是目录,则返回null ...如果是,但您没有必要的权限。
因此,在进入循环之前,必须检查filesFromThisDirectory
是否为空。
但请帮自己一个忙,放弃File
并改用java.nio.file
。