gpt4 book ai didi

java - 比较 JTrees 的有效方法是什么?

转载 作者:行者123 更新时间:2023-11-30 07:20:33 26 4
gpt4 key购买 nike

我经常将我的数据备份到外部驱动器,并且必须筛选我已经传输和尚未传输的文件。我认为创建一个工具会很有用,它允许我选择两个目录,比较它们,然后通过单击几下按钮来传输文件。

我确信这类项目已经存在,所以对我来说,这主要是一种学习体验。

因此,首先,我有一个方法可以获取我所有的文件夹和文件,以便我可以填充我的树:

public static void listAllFiles(String directory, DefaultMutableTreeNode parent, Boolean recursive) {
File [] children = new File(directory).listFiles();

for (int i = 0; i < children.length; i++) {
DefaultMutableTreeNode node = new DefaultMutableTreeNode(children[i].getName());

if (children[i].isDirectory() && recursive) {
parent.add(node);
listAllFiles(children[i].getPath(), node, recursive);
} else if (!children[i].isDirectory()){
parent.add(node);
}
}
}

调用该方法后,我只需创建我的 JTree 并将其添加到我的 View 中:

myTree = new JTree(parent);
jScrollPane1.setViewportView(myTree);

因此,一旦我有了两个 JTrees,我将如何比较节点以查看哪些文件不存在于我的外部文件中?只比较文件数组会更容易吗?

编辑

所谓高效,是指在文件树包含数千个文件的情况下最不可能使计算机陷入困境。

最佳答案

我认为答案是:为什么要比较 JTree 的? JTree 是用于显示数据的 GUI 元素 - 而不是用于存储/比较/操作数据的数据结构。

所以你应该做的是想出一个数据结构来比较你的数据,然后使用 JTree 来显示你的比较结果。假设 CPU 资源是您想要节省的资源,我会说您想要使用 TreeMap .

本质上,您将在源文件系统上构建您的 TreeMap,然后在您在目标文件系统上找到(并匹配)它们时从 TreeMap 中删除项目.完成比较后,您可以在 JTree 中显示仍需要同步的文件。

最重要的是,因为 TreeMap 为 containsKeygetputremove 保证了 log(n) > 方法,它将花费您 nLog(n) 将所有文件插入源中,并花费 nLog(n) 删除(基本上是您的比较)目标中的所有键。

编辑

哦,还有WinMerge是我用过的最好的文件系统比较工具之一。当然,我从来没有用它来同步备份驱动器...

关于java - 比较 JTrees 的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13959175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com