【发布时间】:2018-04-14 18:21:00
【问题描述】:
我想在目录和嵌套子目录中找到所有txt 文件。如果找到,我想将其从一个位置移动到另一个位置。
如果我没有任何嵌套的子目录,下面的代码可以正常工作。
以下代码的问题是,一旦找到嵌套目录,它只会从那个特定的嵌套子目录返回文件。
但我想要我的目录(父目录及其嵌套的子目录)中的所有txt 文件。
public class FilesFindingInDirectory {
static ArrayList<File> al = new ArrayList<File>();
static File fileLocation = null;
public static void main(String[] args) throws IOException {
File filePath = new File("C:\\Users\\Downloads");
File[] listingAllFiles = filePath.listFiles();
ArrayList<File> allFiles = iterateOverFiles(listingAllFiles);
for (File file : allFiles) {
if(file != null) {
String fileName = file.getName();
String sourceFilepath = file.getAbsolutePath();
File targetFilePath = new File("D:\\TestFiles");
String targetPath = targetFilePath.getPath();
Files.move(Paths.get(sourceFilepath), Paths.get("D:\\TestFiles\\" + fileName));
}
}
}
public static ArrayList<File> iterateOverFiles(File[] files) {
for (File file : files) {
if (file.isDirectory()) {
iterateOverFiles(file.listFiles());// Calls same method again.
} else {
fileLocation = findFileswithTxtExtension(file);
if(fileLocation != null) {
System.out.println(fileLocation);
al.add(fileLocation);
}
}
}
return al;
}
public static File findFileswithTxtExtension(File file) {
if(file.getName().toLowerCase().endsWith("txt")) {
return file;
}
return null;
}
}
【问题讨论】:
-
尽管代码在递归结果收集部分可以改进,但我测试了你的代码,它工作正常。你能详细说明你看到什么问题吗?或者提供一个例子?我用一个包含 2 个 txt 文件的目录和另一个包含 2 个其他文本文件的目录测试了代码,它运行良好。我唯一能想象的是,如果文件名相同,它们最终会在最终目的地被覆盖。