4

我有一个非常简单的方法可以扫描目录结构以执行检查。扫描看起来像这样:

File file = new File(initpath);

for(File hex : file.listFiles(new HexagonNameFilter())) {

    for(File wall : hex.listFiles()) {

        for(File shelf : wall.listFiles()) {

            for(File book : shelf.listFiles()) {

                // Perform some actual work
            }
        }
     }
 }

该方法在程序执行期间被多次调用。

不一致(意思是,在扫描过程中的某个不可预测的点),我得到一个 java.lang.NullPointerException 堆栈跟踪指向其中一个 for 语句(它也是不一致的)。这并不具有启发性。我正在考虑将 FilenameFilters 传递给三个 listFiles() 调用,但看不出这将如何解决这个问题。

4

1 回答 1

3

您应该验证您是否在目录上调用此方法。否则,它返回 null。

列表文件

公共文件[] listFiles()

返回一个抽象路径名数组,表示此抽象路径名表示的目录中的文件。

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

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

返回: 抽象路径名数组,表示此抽象路径名所表示的目录中的文件和目录。如果目录为空,则数组将为空。如果此抽象路径名不表示目录,或者发生 I/O 错误,则返回 null。

于 2013-04-29T16:28:59.717 回答