我正在尝试使用jsch库通过sftp下载文件。我成功地做到了这一点,但我只想下载文件,如果它尚未下载。我正在收集一个条目列表,并尝试实现一个哈希集来检查它们是否已经下载。问题是,它正在向hashset添加重复项并重新加载所有文件。下面是我写的代码(好的,重要的部分)。
Vector<ChannelSftp.LsEntry> list = sftpChannel.ls("*.gz");
for (ChannelSftp.LsEntry entry : list) {
if (set.add(entry)) {
sftpChannel.get(entry.getFilename(), fileDestination);
}
}
这就是一种方法。所以,当我再次调用该方法时,它应该只下载我以前没有下载过的文件。但是,它没有这样做。有什么建议?如果我需要澄清任何事情,请告诉我。
答案 0 :(得分:1)
而不是entry
将entry.getFilename()
添加到set
:
if (set.add(entry.getFilename())) {
sftpChannel.get(entry.getFilename(), fileDestination);
}
我假设getFilename
返回String
并且您的申请允许定义set
。
这种方法起作用的原因(如果假设是正确的)是因为equals
在String
上得到了很好的定义,并且这不会让两个相同的名称(相同的字符序列)最终在同一个{ {1}}。
但是,如果您无法修改set
,则应覆盖set
上的hashCode
和equals
,以反映您认为两个ChannelSftp.LsEntry
个对象相等的内容
答案 1 :(得分:1)
请覆盖哈希集上重复项问题的hashCode()和equals()方法