0

我正在使用以下递归方法列出给定目录中的所有文件和文件夹,但是它似乎列出了一些在 Windows 资源管理器中不可见的文件——即使我显示隐藏和系统保护的文件。我设置了扫描C:\\目录的方法,在输出目录中的Boot文件和BOOTSECT.BAK. 好吧,实际上,我不认为它挂起 - 看起来它返回了最终数组,但还有更多文件并且没有抛出异常!

private static ArrayList<File> recursiveSearch(File dir){
        File[] files = dir.listFiles();
        ArrayList<File> result = new ArrayList<File>();
        for(File file : files)
            if(file.isDirectory()){
                result.add(file);
                ArrayList<File >tempList = recursiveSearch(file);

                for(File temp : tempList)
                    result.add(temp);
            }else{
                result.add(file);
                System.out.println(file.getPath());
            }
        return result;

    }

我知道FileSystemView但在这种情况下我不能使用它,因为我需要应用自定义文件名过滤器(我已从上面排除,但我已经测试过并且它不会影响方法输出)。任何帮助将不胜感激 - 在此先感谢

4

1 回答 1

0

此文件 (bootsect.bak) 被检测为目录,但返回一个空文件数组。一种解决方法是检查它是否已实例化:

private static List<File> recursiveSearch(File dir) {
    File[] files = dir.listFiles();
    List<File> result = new ArrayList<File>();
    if (files != null) {
        for (File file : files)
            if (file.isDirectory()) {
                result.add(file);
                List<File> tempList = recursiveSearch(file);

                for (File temp : tempList)
                    result.add(temp);
            } else {
                result.add(file);
                System.out.println(file.getPath());
            }
    }

    return result;
}
于 2012-07-27T19:24:02.953 回答