есть потоки.
т.е. образно ты открываешь файлик, загружаешь n-ое количество байт, как бы прогоняя через java, затем создаешь новый файл
File file = new File ("new_file.zip");
затем ищешь в либах какой нибудь байтовый writer и сохраняешь, затем повторяешь эти операции пока файл не кончится.
не забудь буферизировать
