在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種聳肩方法?或者這個問題實際上是否意味着「你能給我編碼嗎?」? –