簡體   English   中英

比較JTree的有效方法是什么?

[英]What is an efficient way to compare 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確保containsKey (), getputremove方法的log(n),因此將花費nLog(n)插入源中的所有文件,而花費nLog(n)刪除(基本上是比較)目標中的所有鍵。

編輯

哦, WinMerge是我曾經用於文件系統比較的最佳工具之一。 當然,我從未用它來同步備份驅動器...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM