0

我正在创建一个将编译 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

4 回答 4

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

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

于 2012-05-14T15:08:45.967 回答
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");
于 2012-05-14T15:24:23.400 回答
0

这个答案可能对你有用。

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

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);
于 2012-05-14T15:07:56.880 回答
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");
于 2012-05-14T15:16:44.790 回答