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()

Читать дальше @ оракул

Другие вопросы по тегам