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、aを返し、アプリケーションでそのようなaの定義をString許可しているということです。set

これが機能する理由(仮定が正しい場合)は、equalsが明確に定義されてStringおり、2つの同じ名前(文字の同一のシーケンス)が同じになることはないためsetです。

ただし、変更できない場合は、setオーバーライドhashCodeして、2つのオブジェクトが等しくなると思うものを反映equalsする必要があります。ChannelSftp.LsEntryLsEntry

于 2013-02-13T12:15:33.597 に答える
1

HashSet の重複の問題については、hashCode() メソッドと equals() メソッドをオーバーライドしてください。

于 2013-02-13T12:21:38.793 に答える