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块之后,因为它是不可访问的。