如何从文件夹结构中获取文件列表

时间:2012-05-14 15:04:30

标签: java file compiler-construction

即时创建一个将编译java文件的程序,目前我让程序在一个特定文件夹中一次编译大量文件。但我想要它做的是编译文件夹结构中的所有文件给定一个文件夹来启动(例如,如果给定以下地址C:/files_to_be_compiled,你可以搜索该文件夹中的所有文件夹以获取列表所有.class文件)。我有这个代码从单个文件夹获取所有.class文件,但我需要扩展它以从该文件夹中的所有其余文件夹中获取所有.class文件

 String files;
        File folder = new File("C:/files_to_compile");
        File[] listOfFiles = folder.listFiles();
        {

            for (int i = 0; i < listOfFiles.length; i++) {

                if (listOfFiles[i].isFile()) {
                    files = listOfFiles[i].getName();
                    if (files.endsWith(".class") || files.endsWith(".CLASS")) {
                        System.out.println(files);
                    }
                }
            }
        }

如何扩展上面的代码从给定文件夹中的所有文件夹中获取所有.class文件?

4 个答案:

答案 0 :(得分:2)

也许像是

之类的东西
void analyze(File folder){
    String files;        
    File[] listOfFiles = folder.listFiles();
    {

        for (int i = 0; i < listOfFiles.length; i++) {

            if (listOfFiles[i].isFile()) {
                files = listOfFiles[i].getName();
                if (files.endsWith(".class") || files.endsWith(".CLASS")) {
                    System.out.println(files);
                }
            } else if (listOfFiles[i].isDirectory()){
                analyze(listOfFiles[i]);
        }
    }
 }

void start(){
    File folder = new File("C:/files_to_compile");
    analyze(folder);
}

这样,你就会递归地分析你的结构(深度优先搜索)。

答案 1 :(得分:1)

public static void listFilesForFolder(String path)
{
    File folder = new File(path);
    File[] files = folder.listFiles();
    for(File file : files)
    {
        if (file.isDirectory()){
            listFilesForFolder(file.getAbsolutePath());
        }
        else if (file.isFile())
        {
            // your code goes here
        }
    }
}

// run
listFilesForFolder("C:/files_to_compile");

答案 2 :(得分:0)

This answer可能对您有用。

借用链接答案的示例代码:

public void listFilesForFolder(final File folder) {
    for (final File fileEntry : folder.listFiles()) {
        if (fileEntry.isDirectory()) {
            listFilesForFolder(fileEntry);
        } else {
            System.out.println(fileEntry.getName());
        }
    }
}

final File folder = new File("/home/you/Desktop");
listFilesForFolder(folder);

答案 3 :(得分:0)

您可以使用Apache Commons中的DirectoryWalker遍历目录层次结构并应用过滤器 - FileFilterUtils.suffixFileFilter(".class")。例如:

public class ClassFileWalker extends DirectoryWalker {
    public ClassFileWalker() {
        super(FileFilterUtils.directoryFileFilter(), 
                FileFilterUtils.suffixFileFilter(".class"), -1);
    }

    protected void handleFile(File file, int depth, Collection results) {
        if(file.isFile())
            results.add(file);
    }

    public List<File> getFiles(String location) {
        List<File> files = Lists.newArrayList();
        try {
            walk(new File(location), files);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return files;
    }
}

然后像这样使用它:

ClassFileWalker walker = new ClassFileWalker();
List<File> files = walker.getFiles("C:/files_to_be_compiled");