【问题标题】:how I got all of text files in directory and sub directory?我如何获得目录和子目录中的所有文本文件?
【发布时间】:2012-11-25 17:50:18
【问题描述】:

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

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

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

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

【问题讨论】:

标签: java file


【解决方案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);

}

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

【讨论】:

  • 对不起,我不知道代码是如何工作的,你能解释一下吗?我的文件只是文本我在目录中没有图像。我想创建列表只包含文件名
  • 我已经修改了,基本上是递归查找的所有目录
  • 所以现在在每个目录中,您可以检查任何您想要的任何扩展名的所有文件
  • 哦递归。好的....如果我有路径 c:/test 我不能很好地理解递归我如何更改代码并查看输出
  • 只需输入您的目录“c://test”。它会返回一个目录列表。在循环中检查每个目录以查找所有 .txt 文件
【解决方案2】:

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

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

}

【讨论】:

    猜你喜欢
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    相关资源
    最近更新 更多