У меня есть каталог (basedir3645
), содержащий множество вложенных каталогов и файлов (почти 40 000).Каждый вложенный каталог может содержать несколько файлов и каталогов.Проблема состоит в том, чтобы найти самый глубокий файл или каталог (метод должен возвращать уровень вложенности самого глубокого элемента и его имя / путь.
import java.io.File;
public class Main {
public static void main(String[] args) {
String pathToDir = "D:\\Dropbox\\java\\tasks\\basedir3645";
File baseDir = new File(pathToDir);
System.out.println(findDeepestItem(baseDir));
}
static public String findDeepestItem(File folder) {
int currentLevel = 0;
int deepestLevel = 0;
String deepestItem = "";
String result = "";
File[] folderEntries = folder.listFiles();
for (File entry : folderEntries) {
currentLevel = countMatches(entry.getPath(), "\\");
if (entry.isDirectory()) {
findDeepestItem(entry);
if (deepestLevel < currentLevel) {
deepestLevel = currentLevel;
deepestItem = entry.getPath();
}
continue;
} else {
if (deepestLevel < currentLevel) {
deepestLevel = currentLevel;
deepestItem = entry.getPath();
}
}
}
result = String.valueOf(deepestLevel) + " " + deepestItem;
return result;
}
private static int countMatches(String path, String string) {
int number = 0;
String[] array = path.split("");
for (int i = 0; i < path.length(); i++) {
if (string.contentEquals(array[i])) {
number++;
}
}
return number;
}
}
Здесь я определяю уровень вложенности текущего элемента (файла или каталога) путем подсчета количества \
вхождений в элементе getPath()
.
Программа проходит через все элементы дерева (я проверил это, используя System.out.println("entry.getPath()");
в цикле, но не может сосчитать его).самый глубокий уровень вложенности.