0

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

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

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

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

4

2 回答 2

1

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

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

我在这里假设的是getFilename返回 aString并且您的应用程序允许set定义这样的 a 。

这有效的原因(如果假设正确)是因为equals定义良好String,这不会让两个相同的名称(相同的字符序列)以相同的set.

但是,如果您不能修改set您应该覆盖hashCodeequals反映ChannelSftp.LsEntry您认为使两个LsEntry对象相等的内容。

于 2013-02-13T12:15:33.597 回答
1

请覆盖 hashCode() 和 equals() 方法以解决 HashSet 上的重复问题

于 2013-02-13T12:21:38.793 回答