FTP-сервер умирает, пока клиент ftp4j загружает файл

Я использую sauronsoftware.ftp4j.FTPClient для запланированной загрузки файлов с FTP-серверов. Моя проблема в том, что FTP-сервер внезапно умирает, пока клиент загружает с него файл. Это то чем я занимаюсь:

       for (FTPFile remoteFile : remoteFiles) {

                String remoteFileName = remoteFile.getName();
                String localPath = ftpDir.getLocalPath() + remoteFileName;
                log.debug("Downloading remote file {} to local path {}", remoteFileName, localPath);
                try {
                    client.download(remoteFileName, new File(localPath));

                    if (!ftpDir.isLeaveFilesOnServer()) {
                        //Delete remote file
                        client.deleteFile(remoteFileName);                            
                    }

                } catch (IllegalStateException e) {

                    log.error("FTPException ",e);

                    fcr.addErrorFile(remoteFileName);

                } catch (IOException e) {

                    log.error("FTPException ",e);

Проблема в том, что загрузка (...) выполняется отдельным потоком, и когда FTP-сервер умирает, этот поток все равно продолжает работать, как и всегда. Есть ли способ обойти эту проблему или мне следует использовать другой FTP-клиент, который может обрабатывать такие случаи?


person Natta    schedule 17.04.2013    source источник
comment
Вы можете использовать commons-net? commons.apache.org/proper/commons-net/examples/ фтп/   -  person longhua    schedule 17.04.2013


Ответы (1)


Я не уверен, что ваша проблема заключается в том, что ваше FTP-соединение внезапно и неожиданно обрывается, или проблема в том, что основной поток завершил свое выполнение до загрузки файлов. Если мы говорим о втором сценарии, то, возможно, вы можете использовать этот другой метод того же класса FTPClient:

public void download(java.lang.String remoteFileName,
                 java.io.File localFile,
                 FTPDataTransferListener listener)

а затем заставить основной поток ждать, пока все загрузки не закончатся, прежде чем закончить

person Pablo Lozano    schedule 17.04.2013