Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从文件夹结构中获取文件列表_Java_File_Compiler Construction - Fatal编程技术网

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

Java 如何从文件夹结构中获取文件列表,java,file,compiler-construction,Java,File,Compiler Construction,我正在创建一个编译java文件的程序,目前我让这个程序一次编译一个特定文件夹中的多个文件。但我想让它做的是编译给定文件夹开始的文件夹结构中的所有文件(例如,如果给定以下地址C:/files\u to\u be\u compiled,您可以搜索此文件夹中的所有文件夹以获得所有.class文件的列表)。我有一个代码,它从一个文件夹中获取所有.class文件,但我需要展开它,从给定文件夹中的所有其余文件夹中获取所有.class文件 String files; File folder

我正在创建一个编译java文件的程序,目前我让这个程序一次编译一个特定文件夹中的多个文件。但我想让它做的是编译给定文件夹开始的文件夹结构中的所有文件(例如,如果给定以下地址
C:/files\u to\u be\u 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);
                    }
                }
            }
        }
字符串文件;
文件夹=新文件(“C:/files_to_compile”);
File[]listOfFiles=folder.listFiles();
{
for(int i=0;i
如何扩展上述代码以从给定文件夹中的所有文件夹中获取所有.class文件?

可能对您有用

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

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);
也许对你有用

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

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);
也许有点像

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);
}
void分析(文件夹){
字符串文件;
File[]listOfFiles=folder.listFiles();
{
for(int i=0;i
这样,您就可以递归地分析您的结构(深度优先搜索)。

可能是这样的

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);
}
void分析(文件夹){
字符串文件;
File[]listOfFiles=folder.listFiles();
{
for(int i=0;i
这样,您就可以递归地分析您的结构(深度优先搜索)。

您可以使用Apache Commons遍历目录层次结构并应用过滤器-
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扩展了DirectoryWalker{
公共类filewalker(){
超级(FileFilterUtils.directoryFileFilter(),
FileFilterUtils.subfixfilefilter(“.class”),-1);
}
受保护的void handleFile(文件、int深度、收集结果){
if(file.isFile())
结果.添加(文件);
}
公共列表getFiles(字符串位置){
List files=Lists.newArrayList();
试一试{
walk(新文件(位置)、文件);
}捕获(IOE异常){
e、 printStackTrace();
}
归还文件;
}
}
然后像这样使用它:

ClassFileWalker walker = new ClassFileWalker();
List<File> files = walker.getFiles("C:/files_to_be_compiled");
ClassFileWalker=newclassfilewalker();
List files=walker.getFiles(“C:/files\u to\u be\u compiled”);
您可以使用从Apache Commons遍历目录层次结构,并应用过滤器-
文件过滤器直到.subfixfilefilter(“.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扩展了DirectoryWalker{
公共类filewalker(){
超级(FileFilterUtils.directoryFileFilter(),
FileFilterUtils.subfixfilefilter(“.class”),-1);
}
受保护的void handleFile(文件、int深度、收集结果){
if(file.isFile())
结果.添加(文件);
}
公共列表getFiles(字符串位置){
List files=Lists.newArrayList();
试一试{
walk(新文件(位置)、文件);
}捕获(IOE异常){
e、 printStackTrace();
}
归还文件;
}
}
然后像这样使用它:

ClassFileWalker walker = new ClassFileWalker();
List<File> files = walker.getFiles("C:/files_to_be_compiled");
ClassFileWalker=newclassfilewalker();
List files=walker.getFiles(“C:/files\u to\u be\u compiled”);

exact duplicate of您应该使用递归遍历当前目录中的所有目录以扫描.class文件。此外,使用.toLowerCase()而不是比较.class和.CLASSexact duplicate of您应该使用递归遍历当前目录中的所有目录以扫描.class文件。另外,使用.toLowerCase()不要比较.class和.class。你应该投票结束这个问题,而不仅仅是剽窃另一个问题的答案。@Alnitak:剽窃包括“偷窃”来自另一个来源的文本,但没有引用来源。根据这个定义,我没有剽窃另一个答案。好吧,也许这有点强烈,但重点仍然是-你确定了一个相同的问题,标准程序是投票结束。@Alnitak:埃利奥特说的是真的,它也回答了我的问题,所以应该是正确的事实上不应该加价down@newSpringer我没有记下来。我也没有投赞成票,不过——IMHO获得选票需要努力。你应该投票来结束这个问题,而不仅仅是剽窃另一个问题的答案。@Alnitak:剽窃包括从另一个来源“窃取”文本而不引用该来源。根据这个定义