Я использую com.enterprisedt.net.ftp jar для FTP-файлов в удаленном месте. Мой код выглядитфайл становится поврежденным во время FTP
try{
ftp.mkdir(actDirToSearch);
}catch(Exception e){
Log.addInLog(Log.ERR,e.getMessage());
}
ftp.chdir(actDirToSearch);
try{
ftp.put(tarStream, fileName);
}
catch(Exception ex){
throw new FTPException(ex.getMessage());
}
}catch(FTPException e){
throw e;
}catch(IOException e){
throw e;
}finally{
try {
if(ftp != null){
ftp.quit();
}
}
Также я использую этот код, чтобы загрузить файл tar.gz в 2-х различных удаленной машины с RHEL 5.4 и 6. Но когда-нибудь я получаю сообщение об успешном, когда-то tar.gz файл становится коррумпированной после загрузка с меньшим размером на удаленном компьютере. Во время отладки я нашел поведение, которое, если я остановлюсь на строке if (ftp! = Null), а затем через некоторое время я запустим ftp.quit(), он всегда будет успешным. Я видел через ftp-код, я не нашел отдельного потока для ftp-файла tar.gz. Все это происходит последовательно. Мое сомнение в том, почему этот tar.gz-файл поврежден, и почему я получаю успех во время отладки?
Услуги vsftpd работают на обоих устройствах. Также при выполнении ftp вручную с терминала его получение преуспело. Версия Java - 1,6.
Я не знаком с этой FTP-библиотекой, поэтому может помочь увидеть JavaDoc, но я бы рискнул предположить, что вам, вероятно, придется закрыть и/или очистить FTP-соединение до того, как просто уйти. – CodeChimp
Мы переносим в двоичном формате – Krishna
Форматирование передачи не имеет ничего общего с закрытием и/или промывкой выходного потока. Если вы откроете BufferedOutputStream, начните записывать биты так быстро, как сможете, а затем прекратите приложение, очень возможно, что программа не закончит запись битов до того, как приложение опустится. Как правило, в IO вы открываете соединение, обмениваете биты (возможно, несколько раз нажимаете), закрываете соединение, затем завершаете. Мое замечание состояло в том, что я вижу заявление о выходе, но я не вижу закрытия флеша. Я не знаком с API, но я ожидал бы закрыть соединение, когда это будет сделано. – CodeChimp