Каков наилучший способ найти каталог с определенным именем в Java? Каталог, который я ищу, можно найти либо в текущем каталоге, либо в одном из его подкаталогов.Рекурсивно искать каталог в Java
ответ
Ваше решение будет включать в себя использование File.listFiles(String)
Спасибо, Андрей. Я ограничен 1.6, но я забываю, что другие нет. – MadcoreTom
* «Я ограничен 1.6" * Как и я (кроме случаев, когда я опускаюсь обратно на 1.5 dev или выше). К счастью, эти документы. имеют теги '@ since', а компилятор имеет опции кросс-компиляции как« кислотный тест »совместимости версий. Я бы связался с последними документами Java, даже если люди упомянули, что они разрабатывают для Java 1.3. ;) –
Разделяй и властвуй? Наивный подход: Для каждого каталога, вы можете запустить задачу, он выполняет следующие действия:
- списка всех каталоги
- если список содержит соответствующий каталог, гравюры и выйти из приложения
- запуска задачи для каждого каталога.
Для перемещения по файловому дереву можно использовать интерфейс FileVisitor. См. tutorial. См. Также Find sample codes.
Это лучшее решение, чем @listFiles от MadcoreTom, поскольку оно позволяет вам завершить прогулку после того, как файл найден. – 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;
}
Как вы упомянули рекурсии должны удовлетворять этому требованию
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 через streams API:
Optional<Path> hit = Files.walk(myPath)
.filter(file -> file.getFileName().equals(myName))
.findAny();
#walk ленив, поэтому любой short-circuiting terminal operation будет оптимизировать требуемое значение.
Что сравнивает 'java.nio.Path' с' Path.getFileName' с '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. Java 8: Копировать каталог рекурсивно?
- 2. C# - Как рекурсивно искать каталог в приложении WPF?
- 3. Рекурсивно искать каталог двоичных файлов для шестнадцатеричной последовательности?
- 4. Рекурсивно искать двоичное дерево
- 5. Удалить каталог рекурсивно java не работает
- 6. Как перечислить каталог рекурсивно
- 7. Как удалить каталог рекурсивно?
- 8. emacs удаляет каталог рекурсивно?
- 9. Как удалить каталог рекурсивно
- 10. Программно рекурсивно создавать каталог
- 11. Рекурсивно удалить каталог в C
- 12. Как рекурсивно искать самореферентные подтемы?
- 13. Рекурсивно искать xml по записи
- 14. Рекурсивно искать несколько каталогов с os.walk()
- 15. Архивирование каталог рекурсивно и пропустить каталог контейнера
- 16. Рекурсивно искать подкаталоги, игнорировать каталоги PHP
- 17. как искать рекурсивно в Prolog факты
- 18. Рекурсивно искать подстроку в массиве со строками
- 19. Рекурсивно контролировать каталог и все подкаталоги в java
- 20. Vim Plugin YouCompleteMe добавить каталог заголовков рекурсивно
- 21. Удалить каталоги рекурсивно в Java
- 22. Как искать в java?
- 23. Как вы повторяете каждый каталог/каталог рекурсивно в стандартном C++?
- 24. Возможно ли рекурсивно пересекать каталог в Scala?
- 25. Как рекурсивно удалить каталог в Meteor?
- 26. Как рекурсивно искать каталог для всех файлов, включая скрытые файлы в скрытых каталогах, с помощью PowerShell?
- 27. Как искать конкретный каталог рекурсивно для определенного содержимого строки в .odt .ods .doc & .xls files
- 28. Рекурсивно искать Active Directory только для групп
- 29. Рекурсивно искать FOLDERS из списка и перемещать
- 30. Как искать файлы рекурсивно (мой пользовательский код)?
[? Что вы пробовали] (http://www.whathaveyoutried.com/) Вернее, каковы ваши теории, основанные на тестировании лучших 2 (пожимающих плечами) подходов, о которых вы могли бы подумать? Или этот вопрос на самом деле означает «Can u giv me the codez?»? –