首页 > 解决方案 > 查找树中最深的文件/目录,Java

问题描述

我有一个目录 ( 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;
    }
}

在这里,我通过计算\item 中出现的次数来确定当前项(文件或目录)的嵌套级别getPath()

该程序通过树中的所有元素(我已经检查过它,使用System.out.println("entry.getPath()");循环,但它无法计算他最深的嵌套级别。

标签: javafilenested

解决方案


我明白我的错误在哪里 - 变量必须是静态的deepestLevel并且deepestItem属于类。


推荐阅读