比较JTrees的有效方法是什么



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

我相信这类项目已经存在了,所以对我来说,这主要是一次学习经历。

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

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并将其添加到我的视图中:

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

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

编辑

所谓高效,我的意思是在文件树由数千个文件组成的情况下,最不可能让计算机陷入困境。

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

因此,您应该创建一个数据结构来比较中的数据,然后使用JTree来显示比较结果。假设CPU资源是你想要节省的,我想说你想要使用TreeMap。

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

最棒的是,由于TreeMap为containsKeygetputremove方法保护log(n),所以在源中插入所有文件需要花费nLog(n。

编辑

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

相关内容

  • 没有找到相关文章

最新更新