1

我知道如何通过此代码创建列表以包含目录中的所有文件

String path = "c:/test";
File folder = new File(path);
File[] listOfFiles = folder.listFiles();

但是如果我有目录有文件和子目录并且子目录有文件和子子目录等等..

我如何创建列表包含目录和子目录中的所有文件?

4

2 回答 2

1

你可以这样做:

protected java.util.List<File> setDirMap(File inputDir) {
    if (!inputDir.isDirectory()) {
        throw new IllegalArgumentException("Input File is not a directory");
    }
    Set<File> ans = new HashSet<File>();
    ans.add(inputDir);
    File[] dir = inputDir.listFiles(new FileFilter() {

        @Override
        /**
         * Returns true if pathname is a directory. False if not
         */
        public boolean accept(File pathname) {

            if (pathname.isDirectory()) {
                return true;
            } else {
                return false;
            }
        }
    });
    ans.addAll(Arrays.asList(dir));
    for (File current : dir) {
        ans.addAll(setDirMap(current));
    }
    return new ArrayList<File>(ans);

}

这将返回所有目录和子目录。然后,您可以检查每个目录是否有任何您想要的内容

于 2012-11-25T17:56:48.383 回答
0

Try this code, this uses recursion....

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

public class FindIt {

    private ArrayList<String> arList = new ArrayList<String>();

    public void find(String s) {

        File f = new File(s);

        File[] fArr = f.listFiles();

        for (File x : fArr) {

            if (x.isFile()) {

                if (x.getName().endsWith(".txt")) {

                    arList.add(x.getName());

                }

                else {

                    continue;
                }

            }

            else {

                find(x.getAbsolutePath());
            }
        }

    }

    public static void main(String[] args) {

        FindIt f = new FindIt();
        f.find("D:\\xtop");

        for (String fileName : f.arList) {

            System.out.println(fileName);
        }
    }

}
于 2012-11-25T18:19:19.160 回答