Почему при загрузке файла с FTP «иногда» мне выдается поврежденный файл?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему при загрузке файла с FTP «иногда» мне выдается поврежденный файл?

Сообщение Anonymous »


Я загружаю zip-файл с FTP-сервера, используя следующий базовый код:

ftpClient.connect(ftpServerUrl, 21); ftpClient.login(ftpUsername, ftpPassword); ftpClient.enterLocalPassiveMode(); ftpClient.changeWorkingDirectory(ftpFolderPath); for (FTPFile ftpFile : ftpClient.listFiles()) { если (ftpFile.isFile()) { Строка RemoteFilePath = ftpFolderPath + ftpFile.getName(); Строка tempFilePath = ftpDownloadPath + ftpFile.getName(); // Загрузка файла FileOutputStream fos = новый FileOutputStream (tempFilePath); ftpClient.retrieveFile(remoteFilePath, fos); фос.закрыть(); } } Я вижу, что иногда, учитывая один и тот же удаленный файл, он загружает его с разным размером «байт»:


Изображение


Этот аспект позже (с расшифровкой его содержимого) приводит к тому, что весь процесс разархивирования/дешифрования на моей стороне происходит с ошибкой.

Я могу открыть его с помощью 7zip, но фактически не могу извлечь данные ни с помощью 7zip.

Почему это? И как мне каждый раз скачивать "один и тот же файл"? Странно то, что «иногда» работает, иногда нет. Обратите внимание, что удаленный файл остается нетронутым...

Если я использую:

ftpClient.setFileType(FTP.BINARY_FILE_TYPE) при разархивировании всегда происходит сбой, что выполняется этой функцией:

private static void unzip(String zipFilePath, String destDirectory) выдает IOException { Файл destDir = новый файл (destDirectory); если (!destDir.exists()) { если (!destDir.mkdir()) { возвращаться; } } буфер байт[] = новый байт[1024]; ZipInputStream zipInputStream = новый ZipInputStream(Files.newInputStream(Paths.get(zipFilePath))); Запись ZipEntry = zipInputStream.getNextEntry(); в то время как (запись != ноль) { Строка fileName = вход.getName(); Файл newFile = новый файл (destDirectory + File.separator + имя_файла); Родительский файл = новый файл(Objects.requireNonNull(newFile.getParent())); если (!parent.exists()) { логическое значение создано = родительский.mkdirs(); если (!создано) { throw new IOException("Не удалось создать каталог: " +parent.getAbsolutePath()); } } FileOutputStream fos = новый FileOutputStream (newFile); интервал Лен; while ((len = zipInputStream.read(buffer)) > 0) { fos.write(буфер, 0, длина); } фос.закрыть(); запись = zipInputStream.getNextEntry(); } zipInputStream.closeEntry(); zipInputStream.close(); } Примечание: похоже, что поврежденный файл имеет размер 83,873 байта (на 5 меньше правильного).
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»