Java.util.zip заменяет один zip-файл
проблема
У меня есть существующий zipfile "main.zip". Я хочу заменить один файл в нем "скажем main.zip/foo".
Я знаю о:
http://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipOutputStream.html
Тем не менее, это не делает то, что я хочу, так как создает новый Zip-файл - и, следовательно, я должен добавить все существующие записи в main.zip.
Вопрос:
Есть ли способ "заменить" один файл в Zip-архиве на Java? (Без повторного создания нового zip-архива и копирования всех старых данных).
1 ответ
Я думаю, что вам повезло.
Использование Java 7 java.nio.file.FileSystem
вместе с Files.copy()
Мне удалось вставить текстовый файл в большой zip-файл за доли секунды.
public static void main(String[] argv) {
Path myFilePath = Paths.get("c:/dump2/mytextfile.txt");
Path zipFilePath = Paths.get("c:/dump2/myarchive.zip");
try( FileSystem fs = FileSystems.newFileSystem(zipFilePath, null) ){
Path fileInsideZipPath = fs.getPath("/mytextfile.txt");
Files.copy(myFilePath, fileInsideZipPath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Он "монтирует" zip с помощью провайдера ZipFileSystem. Тогда вы можете просто скопировать в нее все, что захотите. Изменения, кажется, происходят на fs.close()