【发布时间】:2019-09-23 09:29:51
【问题描述】:
我有一个目录 (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()");,但它无法计算他最深的嵌套级别。
【问题讨论】:
-
您不能使用
java.nio尤其是Path.getNameCount()来确定文件树中文件系统对象的深度级别吗?也许使用java.nio.file.SimpleFileVisitor来遍历文件树。