java - 遍历Java中的所有文件

标签 java file path iterator directory

我想让我的程序打印我计算机上所有文件的巨大列表。我的问题是它只打印第一个硬盘驱动器的第一个文件夹中的文件,而我希望它打印位于我计算机上的所有文件。任何想法我在这里做错了什么?谢谢。

这是我使用的代码:

主要内容:

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        ArrayList<File> roots = new ArrayList();
        roots.addAll(Arrays.asList(File.listRoots()));


        for (File file : roots) {
            new Searcher(file.toString().replace('\\', '/')).search();
        }
    }
}

和搜索器类:

import java.io.File;

public class Searcher {

    private String root;

    public Searcher(String root) {
        this.root = root;
    }

    public void search() {
        System.out.println(root);
        File folder = new File(root);
        File[] listOfFiles = folder.listFiles();
        for (File file : listOfFiles) {
            String path = file.getPath().replace('\\', '/');
            System.out.println(path);
            if (!path.contains(".")) {
                new Searcher(path + "/").search();
            }
        }
    }
}

最佳答案

我刚试过这个,它对我有用。我确实必须添加一个 null 检查并更改目录评估方法:

package test;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;

public class Searcher {
    public static void main(String[] args) {
        ArrayList<File> roots = new ArrayList<File>();
        roots.addAll(Arrays.asList(File.listRoots()));


        for (File file : roots) {
            new Searcher(file.toString().replace('\\', '/')).search();
        }
    }

    private String root;

    public Searcher(String root) {
        this.root = root;
    }

    public void search() {
        System.out.println(root);
        File folder = new File(root);
        File[] listOfFiles = folder.listFiles();
        if(listOfFiles == null) return;  // Added condition check
        for (File file : listOfFiles) {
            String path = file.getPath().replace('\\', '/');
            System.out.println(path);
            if (file.isDirectory()) {
                new Searcher(path + "/").search();
            }
        }
    }
}

关于java - 遍历Java中的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10691193/

相关文章:

c++ - 使用 getline() 的问题

python - 用相对路径打包数据

python - 如何将路径字符串的格式更改为不同的操作系统?

java - 迭代 nextLine 函数的问题

Java 缩小引用从类型到接口(interface)的转换

java - 当有两个 for() 循环时,第二个不起作用

java - 为什么列表的 remove() 方法采用 Object 而不是 T?

.NET Core 2.0 ASP.NET MVC 下载文件和调用文件保存对话框

java - 耶拿 SDB 连接错误

git - 如何使用不同的 pathdef 同时运行两个 MATLAB 实例?