0

Javaファイルをコンパイルするプログラムを作成していますが、現時点では、1つの特定のフォルダーで一度に多数のファイルをコンパイルするプログラムがあります。しかし、私がやりたいことは、開始するフォルダーを指定してフォルダー構造内のすべてのファイルをコンパイルすることです (たとえば、次のアドレスが指定されている場合、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 に答える