Java将文件附加到zip中[重复]

2023-12-15

可能的重复:
使用 Java 将文件附加到 zip 文件

我有一个 zip 文件,其中包含一些文件夹,但重要的一个是 dir,其中有另一个名为“文件夹”的文件夹,该文件夹包含许多我需要能够更新的文件。

我现在在 zip 之外有一个名为 dir 的目录,其中包含我需要更新的文件的文件夹,因此路径是相同的。我如何将这些文件更新到 zip 中?

棘手的部分是 dir 位于 zip 的根目录,它包含很多文件夹,而不仅仅是文件夹,但我只需要更新文件夹中的文件,我不能弄乱文件夹外但仍在文件夹中的任何文件目录。

这可以做到吗?我知道这可以在 bash 中使用 -u 修饰符来完成,但如果可能的话,我更愿意使用 java 来完成此操作。

感谢您对这个问题的任何帮助

只是为了更清楚

内拉链/dir/文件夹/要更新的文件

拉链外/dir/文件夹/filestomoveintozip


好吧,这是最后的方法,它与我之前粘贴的方法相同,我实际上是从 @Qwe 之前发布的链接中的 stackoverflow 主题获得的,但我添加了路径变量,以便它可以将文件添加到 zip 内的文件夹中

好吧,现在如何在上面的示例中使用它,我想将一个文件添加到另一个文件夹内的文件夹中,我将使用我在问题中的设置来做到这一点,如下所示

private void addFilesToZip(File source, File[] files, String path){
    try{
        File tmpZip = File.createTempFile(source.getName(), null);
        tmpZip.delete();
        if(!source.renameTo(tmpZip)){
            throw new Exception("Could not make temp file (" + source.getName() + ")");
        }
        byte[] buffer = new byte[4096];
        ZipInputStream zin = new ZipInputStream(new FileInputStream(tmpZip));
        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(source));
        for(int i = 0; i < files.length; i++){
            InputStream in = new FileInputStream(files[i]);
            out.putNextEntry(new ZipEntry(path + files[i].getName()));
            for(int read = in.read(buffer); read > -1; read = in.read(buffer)){
                out.write(buffer, 0, read);
            }
            out.closeEntry();
            in.close();
        }
        for(ZipEntry ze = zin.getNextEntry(); ze != null; ze = zin.getNextEntry()){
            if(!zipEntryMatch(ze.getName(), files, path)){
                out.putNextEntry(ze);
                for(int read = zin.read(buffer); read > -1; read = zin.read(buffer)){
                    out.write(buffer, 0, read);
                }
                out.closeEntry();
            }
        }
        out.close();
        tmpZip.delete();
    }catch(Exception e){
        e.printStackTrace();
    }
}

private boolean zipEntryMatch(String zeName, File[] files, String path){
    for(int i = 0; i < files.length; i++){
        if((path + files[i].getName()).equals(zeName)){
            return true;
        }
    }
    return false;
}

感谢您的链接最终能够稍微改进该方法,以便它可以添加不在根目录中的文件,现在我是一个快乐的露营者:)希望这也能帮助其他人

EDIT我在该方法上做了更多工作,这样它不仅可以附加到 zip 中,还可以更新 zip 中的文件

使用这样的方法

File[] files = {new File("/path/to/file/to/update/in")};
addFilesToZip(new File("/path/to/zip"), files, "folder/dir/");

您不会以 / 开头路径(最后一个变量),因为这不是它在 zip 条目中列出的方式

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java将文件附加到zip中[重复] 的相关文章

随机推荐

  • 我可以确定当前的测试执行人员是来自测试实验室还是来自 QTP IDE 中的交互式测试?

    检查当前 QTP 测试执行是否是交互式的 即不是从 QC 测试实验室启动的 QC 测试集执行的一部分 的最有效方法是什么 你们知道一个很酷的方法吗 WR 曾经有一个批处理运行标志 对于 IDE 内的所有执行 该标志都会被可靠地清除 也许QT
  • Bootstrap 4 - 粘性页脚 - 动态页脚高度

    我需要在我的页面上放置一个粘性页脚 但是我没有为页脚设置明确的高度 在较小的屏幕上 行的大小会调整 页脚会变长 因此 getbootstrap 上提供的默认粘性页脚示例不起作用 因为它需要固定的页脚高度 有什么方法可以实现这个吗 Stick
  • 使用 Apache poi 从 docx 获取文本样式

    我正在尝试从 MS docx 文件中获取样式信息 使用添加的样式 如粗体 斜体 编写文件内容没有问题 字体大小等 但读取文件内容并获取样式信息不太清楚 我尝试过使用 XWPFDocument 这个 API 似乎没有读取样式的能力 我现在正在
  • 如何在使用 swift 继续访问视图控制器之前实例化并加载视图控制器

    当我从 viewController A 转到 viewController B 时 我遇到了一个问题 在继续执行之前大约有 5 秒的延迟 我相信这是由于我在 viewDidLoad 中加载的视图数量所致 我有一个 xib 文件 其中包含代
  • 我可以在电子邮件中嵌入 Twitter 源吗?

    我即将向我的客户发送一封电子邮件活动 电子邮件将以 HTML 格式发送 我想在电子邮件中嵌入 Twitter 提要 类似于您在博客和网站中看到的嵌入 Twitter 小部件 当我复制并粘贴通过 Twitter 网站生成的代码时 我的电子邮件
  • 如何使用单声道解决 OSX 上的 SecureChannelFailure

    我正在尝试访问https geocoder cit api here com在单声道上使用 NET F 我正在使用Http帮手来自FSharp Data使用以下代码 let baseUrl https geocoder cit api he
  • 每个奇特的指针都应该是迭代器吗?

    我正在为 C 开发基于段的内存分配器 在这个分配器中 当你释放一块内存时 你必须知道是哪块内存segment它来自 因此 我将指向该段的指针存储为花哨的成员pointer从分配器返回allocate功能 只是为了显示我正在谈论的界面 这是f
  • Android - GCM 服务器密钥不适用于 Urban Airship

    我正在尝试将 Urban Airship 推送通知服务集成到我的 android 项目中 我在 google 开发者控制台中创建了一个新项目 并创建了一个 GCM 服务器密钥 我也在 Urban Airship 配置中添加了该 GCM 密钥
  • 使用实体框架我想仅包含第一个子对象而不是子对象的子对象(子的子对象)

    使用实体框架我想仅包含第一级子对象而不是子对象的子对象 我有这两门课 public class BusinessesTBL public string ID get set public string FirstName get set p
  • 从基类到所有后代遍历类层次结构

    在我正在编写的 iOS 应用程序中 我想遍历类层次结构以列出所有子类的清单 我的意图是使用每个子类类型作为键 viaNSStringForClass 在字典里 我的动机是能够自动发现基类的所有变体 以便我可以调用与该类关联的方法 出于分工的
  • 如何使用下拉列表而不是所有者绘制样式更改组合框控件的外观高度?

    背景 在某个对话框中 有多个连续的控件 我希望它们都具有相同的表观高度 但是 对于具有 CBS DROPDOWNLIST 样式且没有 CBS OWNERDRAW 的组合框 我在更改表观高度时遇到了麻烦 问题 如何更改此类 DROPDOWNL
  • Slim 4 将所有路由放入控制器中,无需 $app

    我需要将所有注册的路由放入控制器中 在 slim 3 中 可以使用以下方式获得路由器 router container gt get router routes router gt getRoutes 使用 app 很容易 routes a
  • 可以在 C# 中使用带有非默认构造函数的单例吗?

    我正在为我的一个项目实施一个通知框架 因为我希望它非常通用 所以用户可以使用多个传输层 这样他就不需要真正关心使用一种交付方法 比如说 WCF 或另一种交付方法 例如 ActiveMQ 用户访问的接口当然与交付方法 WCF 或 Active
  • Doc 文件无法从 asp.net 中的 UserControl 下载

    我有用户控件 其中包含带有候选数据的网格 有一个带有模板字段链接按钮的列候选名称 我附加了一个 rowcommand 事件 我正在该事件上下载一个 word 文件 我有下载文档文件代码 可以从简单的网页下载我的文档文件 但此代码不适用于用户
  • 在最后一帧停止 CSS3 动画

    我有一个 4 部分的 CSS3 动画 点击时播放 但动画的最后一部分是为了将其从屏幕上移开 然而 一旦播放完毕 它总是会回到原来的状态 谁知道我怎样才能将其停止在最后一个 CSS 框架上 100 或者如何在播放后删除它所在的整个 div k
  • 在命令行上使用 OSX Leaks 进行 C 程序?

    谁能给我任何运行 OSX 的简单语法leaks用于检测已编译的 C 程序中的内存泄漏的工具 我使用的是 10 8 所以我遇到了严重的兼容性问题valgrind 我读过的关于 XCode 的泄漏 工具的大部分内容都涉及 XCode 环境 这不
  • Typescript 中的方括号与表达式后的关系

    Typescript 中以下两个方括号符号有区别吗 尝试了几个场景 看起来它们是等效的 谢谢你 interface test a string b string const x test a aaaa b bbbb const y test
  • Vincent 图没有显示,没有收到错误

    由于某种原因 当我尝试与文森特一起绘制某些内容时 我得到以下内容
  • 将复选框状态传递给 PHP

  • Java将文件附加到zip中[重复]

    这个问题在这里已经有答案了 可能的重复 使用 Java 将文件附加到 zip 文件 我有一个 zip 文件 其中包含一些文件夹 但重要的一个是 dir 其中有另一个名为 文件夹 的文件夹 该文件夹包含许多我需要能够更新的文件 我现在在 zi