Java 递归获取jave文件并存储在数组列表中

Java 递归获取jave文件并存储在数组列表中,java,arraylist,file-io,Java,Arraylist,File Io,我正试图从给定的目录及其所有子目录获取所有.java文件。我想出了一个递归解决方案,打印出我想要的所有文件,但我的实际目标是将所有的路径存储到数组中,这样我就可以使用它们了。储存它们是我目前努力的方向。这是我的代码: public static ArrayList<String> getJavaFiles(Path path) throws CodeValidationException { ArrayList<String> files = new Arra

我正试图从给定的
目录
及其所有
子目录
获取所有
.java文件。我想出了一个递归解决方案,
打印出我想要的所有文件,但我的实际目标是将所有的
路径
存储到
数组
中,这样我就可以使用它们了。储存它们是我目前努力的方向。这是我的代码:

public static ArrayList<String> getJavaFiles(Path path) throws CodeValidationException {


    ArrayList<String> files = new ArrayList<String>();

    DirectoryStream<Path> stream = null;
    try {

        stream = Files.newDirectoryStream(path);
        for (Path entry : stream) {
            if (Files.isRegularFile(entry)) {
                if(entry.getFileName().toString().endsWith(".java")) {

                    boolean isRegularExecutableFile = Files.isRegularFile(entry)
                            && Files.isReadable(entry);
                    //&& Files.isExecutable(entry) -> not working

                    if(isRegularExecutableFile) { 
                        System.out.println("path: " + entry);
                        files.add(entry.getFileName().toString());
                    }
                };

            } else if (Files.isDirectory(entry)) {
                getJavaFiles(entry);
            }

        }

        return files;


    } catch (IOException e) {

        throw new CodeValidationException(String.format("error reading folder %s: %s", path, e.getMessage()), e);

    } finally {
        if(stream != null) {
            try {
                stream.close();
            } catch (IOException e) {

            }
        }
    }

}
/用户/chris/unibamberg/3。学期/AJP/inputFile.java


您的代码不起作用,因为您只是检查第一个目录,而没有在子目录中添加文件。在您的
else中,如果您再次调用
getJavaFiles(entry)
,但您没有将从中返回的列表添加到现有列表中:

else if (Files.isDirectory(entry)) {
            getJavaFiles(entry);
    }
您可以将它们添加到列表中,如下所示:

else if (Files.isDirectory(entry)) {
            files.addAll(getJavaFiles(entry));
     }

您的代码不起作用,因为您只是检查第一个目录,而没有在子目录中添加文件。在您的
else中,如果您再次调用
getJavaFiles(entry)
,但您没有将从中返回的列表添加到现有列表中:

else if (Files.isDirectory(entry)) {
            getJavaFiles(entry);
    }
您可以将它们添加到列表中,如下所示:

else if (Files.isDirectory(entry)) {
            files.addAll(getJavaFiles(entry));
     }

请给我们你们的产品。因为你的代码看起来不错。也许您只有一个
.java
文件。@Omid.N编辑了我的问题。不知道这是否真的对你有帮助似乎你正在找到正确的路径,并将它们添加到你的ArrayList中。因此,如果打印正确,就不可能没有正确的输出。另外,您应该将返回语句放在
finally
块之后。@Omid.N再次检查我的问题,我发布了如何打印它。我不能将return语句放在finally块之后,因为它是
无法访问的
。请给出您的输出。因为你的代码看起来不错。也许您只有一个
.java
文件。@Omid.N编辑了我的问题。不知道这是否真的对你有帮助似乎你正在找到正确的路径,并将它们添加到你的ArrayList中。因此,如果打印正确,就不可能没有正确的输出。另外,您应该将返回语句放在
finally
块之后。@Omid.N再次检查我的问题,我发布了如何打印它。我不能将return语句放在finally块之后,因为它是不可访问的。