在Java中查找具有特定名称的目录的最佳方式是什么?我正在查找的目录可以位于当前目录或其某个子目录中。在Java中递归搜索目录
回答
您的解决方案将包括使用File.listFiles(String)
谢谢安德鲁。我受限于1.6,但我忘记了其他人不是。 – MadcoreTom
*“我被约束了1.6”*和我一样(除了当我回到1.5 dev或更高版本时)。幸运的那些文档。有'@ since'标签和编译器具有交叉编译选项作为版本兼容性的'酸性测试'。即使人们提到他们正在为Java 1.3开发,我也会链接到最新的Java Docs。 ;) –
分而治之?天真的方法:对于每一个目录,你可以开始一个任务,它具有以下功能:
- 列表中的每个目录
- 如果列表中包含匹配的目录,打印和退出应用程序
- 启动任务为每个目录。
要走文件树,可以使用FileVisitor接口。 请参阅tutorial。另请参阅Find sample codes。
这是比@ MadcoreTom的#listFiles更好的解决方案,因为它可以让您在找到文件后终止漫游。 – Kong
喜欢的东西:
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;
}
至于你提到的递归应该通过streams API迎合这种需求
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);
}
}
}
}
我是否正确,这种方法是不可重复使用的(将其移动到某个实用程序类将不起作用),即它只能检测一次文件夹,一旦检测到“foundFolder”将保持为真? –
在Java 8:
Optional<Path> hit = Files.walk(myPath)
.filter(file -> file.getFileName().equals(myName))
.findAny();
的#walk很懒,所以任何short-circuiting terminal operation都会优化所需的IO。
将'Path.getFileName'中的'java.nio.Path'与'String'进行比较。我建议'file.getFileName()。toFile.getName()'知道这看起来很复杂,也许很昂贵。 –
或者,你应该使用递归的概念搜索文件,直到它发现:这里是代码:
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;
}
}
- 1. 递归目录搜索
- 2. 递归搜索子目录
- 3. java中的递归搜索
- 4. 目录的递归搜索php
- 5. 指定多个目录递归搜索
- 6. 用os.walk递归搜索多个目录()
- 7. node.js的fs.readdir递归目录搜索[2]
- 8. 递归的树搜索在Java中
- 9. 递归搜索函数Java
- 10. Emacs递归项目搜索
- 11. Java递归目录搜索抛出空指针异常
- 12. 使用Java的.mkv文件递归搜索目录
- 13. 如何在Vim中的目录中递归搜索和替换?
- 14. 递归搜索C目录下的根目录#
- 15. Lotusscript搜索窗口目录的子目录和文件。递归?
- 16. 使用os.scandir停留在递归目录搜索中
- 17. 递归在目录中搜索所有文件夹路径
- 18. MS-DOS批处理:在目录中搜索非递归文件
- 19. 如何使用grep在递归搜索中排除目录?
- 20. 如何在PHP中调试递归目录搜索脚本?
- 21. 递归在BST中搜索
- 22. 在树中递归搜索
- 23. 递归搜索
- 24. 递归搜索Linux中父目录中的文件
- 25. 为SQL文件递归搜索目录中(NSIS)
- 26. C# - 如何递归搜索WPF应用程序中的目录?
- 27. Python递归搜索目录以查找文件的存在
- 28. 递归树搜索
- 29. Linq递归搜索
- 30. Bash递归搜索
[?你尝试过什么(http://www.whathaveyoutried.com/)或者说,你的理论基于测试你能想到的最好的2种耸肩方法?或者这个问题实际上是否意味着“你能给我编码吗?”? –