【问题标题】:Java listFiles displaying Boot directory and other 'protected' FilesJava listFiles 显示引导目录和其他“受保护”文件
【发布时间】:2012-07-26 12:15:30
【问题描述】:

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

【问题讨论】:

    标签: java windows file recursion directory


    【解决方案1】:

    此文件 (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;
    }
    

    【讨论】:

      猜你喜欢
      • 2017-01-25
      • 1970-01-01
      • 2017-09-19
      • 2018-07-06
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      相关资源
      最近更新 更多