在Java中查找具有特定名称的目录的最佳方法是什么?我正在寻找的目录可以位于当前目录或其子目录之一。
答案 0 :(得分:7)
在Java 8中通过streams API:
Optional<Path> hit = Files.walk(myPath)
.filter(file -> file.getFileName().equals(myName))
.findAny();
#walk是懒惰的,所以任何short-circuiting terminal operation都会优化所需的IO。
答案 1 :(得分:4)
要遍历文件树,可以使用FileVisitor界面。 请参阅tutorial。另请参阅Find sample codes。
答案 2 :(得分:3)
如你所说,递归应该满足这个要求
import java.io.File;
public class CheckFile {
private static boolean foundFolder = false;
public static void main(String[] args) {
File dir = new File("currentdirectory");
findDirectory(dir);
}
private static void findDirectory(File parentDirectory) {
if(foundFolder) {
return;
}
File[] files = parentDirectory.listFiles();
for (File file : files) {
if (file.isFile()) {
continue;
}
if (file.getName().equals("folderNameToFind")) {
foundFolder = true;
break;
}
if(file.isDirectory()) {
findDirectory(file);
}
}
}
}
答案 3 :(得分:2)
您的解决方案将包括使用File.listFiles(String)
答案 4 :(得分:0)
分而治之?一种天真的方法:对于每个目录,您可以启动任务,它执行以下操作:
答案 5 :(得分:0)
类似的东西:
public static final File findIt(File rootDir, String fileName) {
File[] files = rootDir.listFiles();
List<File> directories = new ArrayList<File>(files.length);
for (File file : files) {
if (file.getName().equals(fileName)) {
return file;
} else if (file.isDirectory()) {
directories.add(file);
}
}
for (File directory : directories) {
File file = findIt(directory);
if (file != null) {
return file;
}
}
return null;
}
答案 6 :(得分:0)
或者,你应该使用递归搜索文件的概念,直到它找到:这是代码:
String name; //to hold the search file name
public String listFolder(File dir) {
int flag;
File[] subDirs = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory();
}
});
System.out.println("File of Directory: " + dir.getAbsolutePath());
flag = Listfile(dir);
if (flag == 0) {
System.out.println("File Found in THe Directory: " + dir.getAbsolutePath());
Speak("File Found in THe Directory: !!" + dir.getAbsolutePath());
return dir.getAbsolutePath();
}
for (File folder : subDirs) {
listFolder(folder);
}
return null;
}
private int Listfile(File dir) {
boolean ch = false;
File[] files = dir.listFiles();
for (File file : files) {
Listfile(file);
if (file.getName().indexOf(name.toLowerCase()) != -1) {//check all in lower case
System.out.println(name + "Found Sucessfully!!");
ch = true;
}
}
if (ch) {
return 1;
} else {
return 0;
}
}