Java listFiles显示Boot目录和其他“受保护”文件

时间:2012-07-27 19:11:48

标签: java windows file recursion directory

我使用以下递归方法列出给定目录中的所有文件和文件夹,但它似乎列出了一些在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但是在这个时候我不能使用它,因为我需要应用一个自定义的文件名过滤器(我从上面排除了,但我已经测试过,它不会影响方法输出)。任何帮助将不胜感激 - 提前感谢

1 个答案:

答案 0 :(得分: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;
}