如何解决在目录上调用listFiles时,Java NullPointerException
|| 我在用这段代码访问的服务器上有一系列包含书籍的文件夹。我想使每个文件夹成为一个对象,以便以后可以对其中的文件进行一些处理。我正在尝试使用此方法将文件夹列表作为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语句打印出与文件夹完全相同的路径,然后打印出不同的内存地址,这也是预期的。当它到达\“ empty \”文件夹时,它将再次为内存地址输出null。
现在,对于真正的问题,带有for循环的行是程序崩溃并引发NullPointerException的地方,listFiles方法的文档中甚至没有描述。
为什么会这样呢?另外,为什么我的非空文件夹返回null?
解决方法
listFiles()
方法的文档明确指出:“如果此抽象路径名不表示目录,或者发生I / O错误,则返回null。”
无法列出目录的最常见原因之一是该进程缺少正确的权限。您是自己运行还是在以其他用户身份运行的某种服务中运行?
顺便说一句,“ 3” API是一个很好的例子,说明了生活无一例外的糟糕。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。