java - 查找树中最深的文件/目录,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()");
循环,但它无法计算他最深的嵌套级别。
解决方案
我明白我的错误在哪里 - 变量必须是静态的deepestLevel
并且deepestItem
属于类。
推荐阅读
- getstream-io - 一种在不阅读通知提要的情况下将通知标记为已见的方法?
- azure - 从 Azure Active Directory 获取订阅的 TenanId
- spring-amqp - spring-amqp 无法在 SimpleMessageListenerContainerFactory 中使用自定义 MessagingMessageListenerAdapter
- mongodb - 使用 Mongodb 和 Laravel 对键求和并按键分组
- file - 什么是常见的 pscp 命令问题?
- r - R:置信区间和预测
- c# - 网络核心加载程序异常
- mongo-shell - 如何在 mongo shell 中迭代查询
- objective-c - 当我尝试将 customInfoViewController 设置为 nil 时,应用程序失败
- apache-kafka - 在 Keycloak 中使用第三方库