2013-02-13 2 views
0

Я пытаюсь загрузить файлы через sftp, используя библиотеку jsch. Я успешно это делаю, но хочу только загрузить файл, если он еще не загружен. Я собираю список записей и пытаюсь реализовать хэшетт, чтобы проверить и посмотреть, загружены ли они. Проблема в том, что она добавляет дубликаты в хэшсет и перезагружает все файлы. Ниже приведен код, который я написал (ну, важные части).HashSet добавляет Duplicate 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

+0

1) Проверьте, как ChannelSftp .LsEntry.hashCode() и equals(). Возможно, этот класс не подходит как ключ структуры хеша. 2) Проверьте область действия заданной переменной. Он действительно помнит предыдущие звонки? –

ответ

1

Вместо entry добавить entry.getFilename() к set:

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

То, что я здесь предполагается, что getFilename возвращает String и приложение позволяет такой set быть определены.

Причины это работает (если предположения верны), потому что equals корректно определена на String и это не даст две одинаковых имен (идентичные последовательности символов) в конечном итоге в том же set.

Однако, если вы не можете изменить set вы должны переопределить hashCode и equals на ChannelSftp.LsEntry отражает то, что вы думаете, что делает два LsEntry объектов равно.

+0

Я нашел это самым простым решением. Я просто изменил набор, который будет определен как набор строк. Спасибо. – kaptaincooke

1

Пожалуйста переопределить хэш-код() и Equals() методы для выдачи дубликатов на HashSet