我如何得到目录和子目录中的所有文本文件?

时间:2012-11-25 17:50:19

标签: java file

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

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

但如果我有目录有文件和子目录,子目录有文件和子子目录等等。

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

2 个答案:

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

}

返回所有目录和子目录。然后,您可以检查每个目录中的任何内容

答案 1 :(得分:0)

试试这段代码,这会使用递归....

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);
        }
    }

}