我正试图.java-files
从给定directory
及其全部中获得全部收益subdirectories
。香港专业教育学院提出了一个递归的解决方案,prints
淘汰了我想要的所有文件,但我的实际目标是将所有文件存储paths
到,array
以便我可以使用它们。目前,我一直在努力存储它们。这是我的代码:
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) {
}
}
}
}
编辑:
这是一个例子:
这是从getJavaFiles
:
路径:/用户/克里斯/ Uni Bamberg / 3。学期/ AJP /作业1 /作业1 / src / de / uniba / wiai / dsg / ajp /作业1 / Main.java
路径:/用户/克里斯/ Uni Bamberg / 3。学期/ AJP /作业1 /作业1 / src / de / uniba / wiai / dsg / ajp /作业1 /验证/impl/SimpleCodeValidator.java
路径:/用户/克里斯/ Uni Bamberg / 3。学期/ AJP /作业1 /作业1 / src / de / uniba / wiai / dsg / ajp /作业1 /验证/ impl / TaskValidation.java
路径:/用户/克里斯/ Uni Bamberg / 3。学期/ AJP /作业1 /作业1 / src / de / uniba / wiai / dsg / ajp /作业1 /验证/ CodeValidationException.java
路径:/用户/克里斯/ Uni Bamberg / 3。学期/ AJP /作业1 /作业1 / src / de / uniba / wiai / dsg / ajp /作业1 /验证/ ValidationResult.java
路径:/用户/克里斯/ Uni Bamberg / 3。学期/ AJP /作业1 /作业1 / src / de / uniba / wiai / dsg / ajp /作业1 /验证/ Warning.java
路径:/用户/克里斯/ Uni Bamberg / 3。学期/ AJP /作业1 /作业1 / src / de / uniba / wiai / dsg / ajp /作业1 /验证/ CodeValidator.java
路径:/用户/克里斯/ Uni Bamberg / 3。学期/ AJP /作业1 /作业1 / src / de / uniba / wiai / dsg / ajp /作业1 /验证/ ValidationTask.java
路径:/用户/克里斯/ Uni Bamberg / 3。学期/ AJP /作业1 /作业1 / src / de / uniba / wiai / dsg / ajp /作业1 /验证/ WarningType.java
路径:/用户/克里斯/ Uni Bamberg / 3。学期/AJP/inputFile.java
但是当打印出ArrayList
我从函数中获得的结果时,我得到的是:
for(int i = 0; i < files.size(); i++) {
System.out.print(files.get(i));
}
/用户/克里斯/ Uni Bamberg / 3。学期/AJP/inputFile.java
您的代码不起作用,因为您只是在检查第一个目录,而没有在子目录中添加文件。在您中,else-if
您要getJavaFiles(entry)
再次打电话,但是您没有将从它返回的列表添加到现有列表中:
else if (Files.isDirectory(entry)) {
getJavaFiles(entry);
}
您可以像这样将它们添加到列表中:
else if (Files.isDirectory(entry)) {
files.addAll(getJavaFiles(entry));
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句