Java NullPointer在目录上调用listFiles()时的异常
2022-09-03 00:14:27
我在服务器上有一系列包含书籍的文件夹,我用这段代码访问这些文件夹。我想使每个文件夹都成为一个对象,以便以后可以对其中的文件进行一些处理。我正在尝试使用此方法将文件夹列表作为Book对象返回。
public List<Book> getBooks(File folder){
List<Book> books = new ArrayList<Book>();
for (File f : folder.listFiles()){
if (f.isDirectory()){
System.out.println(f.getAbsolutePath() + "" + f.listFiles());
books.add(new Book(f));
}
}
return books;
}
此块中的 println 语句正在打印文件夹的直接路径,然后是内存地址以及其他一些信息。但是,在文件夹的某个位置,当调用 listFiles() 时,它会打印出 null。它正在其上执行此操作的文件夹不为空。然后,这个假定的空文件夹被传递给我的类 init 方法。
public Book(File bookFolder) {
this.bookFolder = bookFolder;
this.bookPath = bookFolder.getAbsolutePath();
System.out.println(bookFolder + " " + bookFolder.listFiles());
for (File f : bookFolder.listFiles()) {
...
}
}
此块中的 println 语句输出出与文件夹完全相同的路径,然后是不同的内存地址,这也是预期的。当它命中“空”文件夹时,它会再次打印内存地址的null。
现在,对于真正的问题,带有for循环的行是程序崩溃并引发NullPointerException的地方,这在listFiles方法的文档中甚至没有描述。
为什么会发生这种情况?另外,为什么我的非空文件夹返回 null?