有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

显示启动目录和其他“受保护”文件的windows Java列表文件

我使用以下递归方法列出给定目录中的所有文件和文件夹,但它似乎列出了一些在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) 个答案

  1. # 1 楼答案

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