HashSet正在添加重复的ChannelSftp.LsEntry

时间:2013-02-13 12:11:14

标签: java hashset jsch

我正在尝试使用jsch库通过sftp下载文件。我成功地做到了这一点,但我只想下载文件,如果它尚未下载。我正在收集一个条目列表,并尝试实现一个哈希集来检查它们是否已经下载。问题是,它正在向hashset添加重复项并重新加载所有文件。下面是我写的代码(好的,重要的部分)。

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

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

这就是一种方法。所以,当我再次调用该方法时,它应该只下载我以前没有下载过的文件。但是,它没有这样做。有什么建议?如果我需要澄清任何事情,请告诉我。

2 个答案:

答案 0 :(得分:1)

而不是entryentry.getFilename()添加到set

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

我假设getFilename返回String并且您的申请允许定义set

这种方法起作用的原因(如果假设是正确的)是因为equalsString上得到了很好的定义,并且这不会让两个相同的名称(相同的字符序列)最终在同一个{ {1}}。

但是,如果您无法修改set,则应覆盖set上的hashCodeequals,以反映您认为两个ChannelSftp.LsEntry个对象相等的内容

答案 1 :(得分:1)

请覆盖哈希集上重复项问题的hashCode()和equals()方法