2013-02-13 54 views
0

我想通過使用jsch庫的sftp下載文件。我成功地做到了這一點,但我只想下載文件,如果它尚未下載。我正在收集條目列表,並嘗試實施哈希集以檢查它們是否已被下載。問題是,它將重複項添加到哈希集並重新下載所有文件。以下是我寫的代碼(以及重要部分)。HashSet正在添加重複ChannelSftp.LsEntry

Vector<ChannelSftp.LsEntry> list = sftpChannel.ls("*.gz"); 

for (ChannelSftp.LsEntry entry : list) { 
    if (set.add(entry)) { 
     sftpChannel.get(entry.getFilename(), fileDestination); 
    } 
} 

這是所有的方法。所以,當我再次調用該方法時,它應該只下載我以前沒有下載過的文件。但是,這不是那樣做的。有什麼建議麼?請讓我知道是否需要澄清任何事情。

+0

這一切都取決於「等於」爲「用GetFileName()」 – bmargulies 2013-02-13 12:12:59

+0

1的結果值的定義)檢查如何ChannelSftp .LsEntry.hashCode()和equals()方法被實現。也許這個類不適合作爲散列結構鍵。 2)檢查設定變量的範圍。它真的記得以前的電話嗎? – 2013-02-13 12:14:08

回答

1

而不是entry添加entry.getFilename()set

if (set.add(entry.getFilename())) { 
    sftpChannel.get(entry.getFilename(), fileDestination); 
} 

我在這裏假設是什麼getFilename返回String和您的應用程序允許這樣的set來定義。

的原因,這個工程(如果該假設是正確的),是因爲equals很好的String定義,這會不會讓兩人相同的名字(字符相同序列)在同一set結束。

但是,如果您不能修改set你是否應該優先於ChannelSftp.LsEntryhashCodeequals反映你的想法提出了兩個LsEntry對象等於

+0

我發現這是最簡單的解決方案。我只是將集合改爲定義爲一組字符串。謝謝。 – kaptaincooke 2013-02-13 12:47:11

1

請重寫的hashCode()和equals()的重複問題方法上的HashSet