Скорее всего, операция загрузки завершилась ошибкой, а вы это не проверили. При возникновении ошибок, FTPClient не выбрасывает исключение, а просто сохраняет код ошибки, а вызванный метод возвращает false. При этом исполнение кода продолжается и доходит до корректного закрытия файла, из-за чего вы получаете файл размером 0 байт. Если retrieveFile вернул false, то смотрите ftpClient.getReplyString(), вместо того, чтобы корректно закрывать файл. Например, можно сделать так:
if(!isDownloaded) {
throw new Exception(ftpClient.getReplyString());
}
При этом конечно не забывать об освобождении ресурсов в блоке finally пока что не существующего в методе блока try...