Найти самый глубокий файл / каталог в дереве, Java - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть каталог (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()"); в цикле, но не может сосчитать его).самый глубокий уровень вложенности.

1 Ответ

0 голосов
/ 23 сентября 2019

Не только вернуть имя самого глубокого предмета, но и уровень.Для этого вам нужно будет

  • передать текущий уровень в findDeepestItem и
  • вернуть объект результата, содержащий имя и уровень.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...