Удаление файла внутри zip в java

У меня есть папка, содержащая несколько файлов, теперь я хочу добавить эти файлы в zip, который уже существует. Если файл, который я добавляю в zip, уже есть, то я заменяю старый файл новым. Для zip-операций я использую zip4j jar. Это часть моего кода

        for(File entry : temp.listFiles())
        {
            String file = entry.getName();

            if(trgZip.getFileHeader(file) != null)
            {
                trgZip.removeFile(file);
            }
            ZipParameters param = new ZipParameters();
            trgZip.addFile(entry, param);
        }

Но я получаю это исключение net.lingala.zip4j.exception.ZipException: не удается удалить старый zip-файл. Может ли кто-нибудь предложить, что мне делать, чтобы исправить это, или где я ошибаюсь, или как этот метод removeFile работает, так что я могу попытаться найти точку ошибки.

заранее спасибо


person xan    schedule 13.01.2017    source источник
comment
Возможный дубликат Удалить файлы из ZIP-архив без распаковки на Java или Python   -  person Raedwald    schedule 13.01.2017


Ответы (1)


Попробуй это... !! Укажите путь к вашему zip-файлу в качестве первого аргумента и имя файла, который вы хотите удалить из zip-файла, в качестве второго аргумента.

public static void deleteFile(String zipFilePath,String fileName) throws Exception{
        Map<String, String> zip_properties = new HashMap<>(); 
        zip_properties.put("create", "false"); 

        /* Specify the path to the ZIP File that you want to read as a File System */
        URI zip_disk = URI.create("jar:file:"+zipFilePath);

        /* Create ZIP file System */
        try (FileSystem zipfs = FileSystems.newFileSystem(zip_disk, zip_properties)) {
            /* Get the Path inside ZIP File to delete the ZIP Entry */
            Path pathInZipfile = zipfs.getPath(fileName);
            System.out.println("About to delete an entry from ZIP File" + pathInZipfile.toUri() ); 
            /* Execute Delete */
            Files.delete(pathInZipfile);
            System.out.println("File successfully deleted");   
        } 
    }
person Varun Chawla    schedule 13.01.2017
comment
Я пытался использовать FileSystems, но не смог заставить его работать. Он продолжал отправлять ошибку, исключение ReadOnlyFileSystems. Можете предложить что-нибудь с zip4j или как заставить работать эту файловую систему. - person xan; 16.01.2017
comment
Пожалуйста, поделитесь полной трассировкой стека и кодом, который вы пробовали. - person Varun Chawla; 24.01.2017
comment
Используйте java.nio.file.FileSystem, а не FilesSystem или FileSystems. - person Varun Chawla; 24.01.2017