1

我有一个 zip 文件,我想用另一个文件替换其中的一个文件。因此,不需要删除 zip 条目,只需将 zip 条目的文件替换为另一个文件即可。

这是我尝试过的。

public void replaceConfigurationFile(ZipFile zipFile, ZipOutputStream zos, String pathToNewFile, String configFileToReplaced) 
        throws IOException {
    String zipEntryName;
    for(Enumeration<?> e = zipFile.entries(); e.hasMoreElements(); ) {

        ZipEntry entryIn = (ZipEntry) e.nextElement();
        zipEntryName = entryIn.getName();
            if(zipEntryName.endsWith(configFileToReplaced)) {

                FileInputStream fis = new FileInputStream(pathToNewFile);
                ZipEntry zipEntry = new ZipEntry(zipEntryName);

                zos.putNextEntry(zipEntry);

                byte[] bytes = new byte[1024];
                int length;
                while ((length = fis.read(bytes)) >= 0) {
                    zos.write(bytes, 0, length);
                }

                zos.closeEntry();
                fis.close();
            } else {
                zos.putNextEntry(entryIn);
                InputStream is = zipFile.getInputStream(entryIn);
                byte [] buf = new byte[1024];
                int len;
                while((len = (is.read(buf))) > 0) {            
                    zos.write(buf, 0, len);
                }
             zos.closeEntry();  
           }


    } // enf of for
}   

我有一个名为的文件 zip 条目:

WEB-INF/classes/config/app-dev.yml

我有一个文件在位置 d 驱动器的位置

 D:/app-dev.yml

我可以通过替换我要替换的文件将文件复制到不同的 zip 文件中。但这实际上是不需要的(创建不同的文件)。那么我应该怎么做才能用我的自定义文件替换文件。

我在 Stackoverflow 中搜索了不同的帖子,但找不到我需要的东西。我读到无法删除 zip 条目,但是替换它呢?请帮忙

4

2 回答 2

2

您的问题是新文件可能比旧文件大 - 或者更小!您需要完全按照您所做的来进行更改。新文件 ZIPped 与前一个文件大小完全相同的概率几乎为零。

于 2016-06-11T13:06:52.140 回答
2

标准 Java ZIP 文件库不允许您更新现有的 ZIP 文件。您需要使用第三方库。谷歌搜索应该会找到许多替代品。

但是你需要注意几件事:

  • 如果您的应用程序...或系统...在更新 ZIP 文件时崩溃,则该文件可能已损坏。

  • 更新 ZIP 文件时,文件的替换版本将附加到 ZIP。旧版本仍会在 ZIP 中...但不在 ZIP 文件索引中。因此更新 ZIP 文件(不重写)会浪费磁盘空间。

于 2016-06-11T13:24:40.293 回答