递归后无法将文件添加到列表 Java
Unable to add Files to List after recursion Java
我不太确定如何给这个问题起标题,但我遇到了一些我不太了解的错误。
我有一种方法可以递归地搜索根目录中标记为 'calculation' 的子目录以查找其文件内容。当我打印到控制台时它似乎有效。但是,当我尝试将这些文件添加到文件列表时,它似乎不起作用,大小为 0...
如何将这些文件添加到 List 或 File[] 或任何类型的数据结构中以便我可以处理它们?
这是我的代码:
public static List<File> walkDirectory(String path) {
List<File> fileList = new ArrayList<File>();
File root = new File(path);
File[] list = root.listFiles();
if (list == null) return null;
for (File f : list) {
if (f.isDirectory()) {
walkDirectory(f.getAbsolutePath());
}
else if (f.getParentFile().getName().contains("calculation")) {
fileList.add( f ); // does not work...
System.out.println("File: " + f.getAbsoluteFile());
}
}
return fileList;
}
public static void main(String[] args) {
System.out.println(FileWalker.walkDirectory("/path/to/root/directory").size()); // size is 0
}
if (f.isDirectory()) {
walkDirectory(f.getAbsolutePath());
}
您不 return 或对 walkDirectory()
的结果做任何事情。您可能希望在列表中累积结果,并在循环完成后 return 它。
将此行 List<File> fileList = new ArrayList<File>();
移到 walkDirectory 函数之外。这里发生的事情是每次调用函数时都会创建一个新的 fileList 变量。
要么使 fileList
成为 class 的私有静态变量,要么在函数本身中传递 List
参数。
我不太确定如何给这个问题起标题,但我遇到了一些我不太了解的错误。
我有一种方法可以递归地搜索根目录中标记为 'calculation' 的子目录以查找其文件内容。当我打印到控制台时它似乎有效。但是,当我尝试将这些文件添加到文件列表时,它似乎不起作用,大小为 0...
如何将这些文件添加到 List 或 File[] 或任何类型的数据结构中以便我可以处理它们?
这是我的代码:
public static List<File> walkDirectory(String path) {
List<File> fileList = new ArrayList<File>();
File root = new File(path);
File[] list = root.listFiles();
if (list == null) return null;
for (File f : list) {
if (f.isDirectory()) {
walkDirectory(f.getAbsolutePath());
}
else if (f.getParentFile().getName().contains("calculation")) {
fileList.add( f ); // does not work...
System.out.println("File: " + f.getAbsoluteFile());
}
}
return fileList;
}
public static void main(String[] args) {
System.out.println(FileWalker.walkDirectory("/path/to/root/directory").size()); // size is 0
}
if (f.isDirectory()) {
walkDirectory(f.getAbsolutePath());
}
您不 return 或对 walkDirectory()
的结果做任何事情。您可能希望在列表中累积结果,并在循环完成后 return 它。
将此行 List<File> fileList = new ArrayList<File>();
移到 walkDirectory 函数之外。这里发生的事情是每次调用函数时都会创建一个新的 fileList 变量。
要么使 fileList
成为 class 的私有静态变量,要么在函数本身中传递 List
参数。