Вы используете локальную переменную path для указания на удаленный файл:
filename = "C:\\tmp\\user\\" + file.getName();
...
client.retrieveFile(filename, fos);
Вы хотите указать на удаленный файл, а не на локальный пункт назначения, например:
client.retrieveFile(file.getName(), fos);
Кроме того, убедитесь, что вы закрыли свой поток fos
после чтения каждого файла, а не в самом конце.Для этого вы можете использовать IOUtils.closeQuietly(fos);
, если получите библиотеку commons.io , которая позволяет избежать вложенных блоков try-catch.
Вам также следует использовать файл BINARY введите и BLOCK режим передачи для передачи zip-файлов:
client.setFileTransferMode(FTPClient.BLOCK_TRANSFER_MODE);
client.setFileType(FTPClient.BINARY_FILE_TYPE);