java zip追加_用Java将文件追加到zip文件

news/2024/7/24 8:35:18 标签: java zip追加

正如其他人提到的,不可能将内容附加到现有的zip(或WAR)中。但是,可以在不将提取的内容临时写入磁盘的情况下动态创建新的zip。很难猜测这会有多快,但这是使用标准Java所能达到的最快速度(至少据我所知)。正如CarlosTasada所提到的,SevenZipJBindings可能会挤出一些额外的时间,但是将这种方法移植到SevenZipJBindings仍然比在同一个库中使用临时文件要快。

下面是一些代码,用于编写现有zip(war.zip)的内容,并将一个额外的文件(responer.txt)附加到一个新zip(附录.zip)中。所需的只是Java 5或更高版本,不需要额外的库。import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;

import java.io.OutputStream;import java.util.Enumeration;import java.util.zip.ZipEntry;

import java.util.zip.ZipFile;import java.util.zip.ZipOutputStream;public class Main {

// 4MB buffer

private static final byte[] BUFFER = new byte[4096 * 1024];

/**

* copy input to output stream - available in several StreamUtils or Streams classes

*/

public static void copy(InputStream input, OutputStream output) throws IOException {

int bytesRead;

while ((bytesRead = input.read(BUFFER))!= -1) {

output.write(BUFFER, 0, bytesRead);

}

}

public static void main(String[] args) throws Exception {

// read war.zip and write to append.zip

ZipFile war = new ZipFile("war.zip");

ZipOutputStream append = new ZipOutputStream(new FileOutputStream("append.zip"));

// first, copy contents from existing war

Enumeration extends ZipEntry> entries = war.entries();

while (entries.hasMoreElements()) {

ZipEntry e = entries.nextElement();

System.out.println("copy: " + e.getName());

append.putNextEntry(e);

if (!e.isDirectory()) {

copy(war.getInputStream(e), append);

}

append.closeEntry();

}

// now append some extra content

ZipEntry e = new ZipEntry("answer.txt");

System.out.println("append: " + e.getName());

append.putNextEntry(e);

append.write("42\n".getBytes());

append.closeEntry();

// close

war.close();

append.close();

}}


http://www.niftyadmin.cn/n/1554552.html

相关文章

Java项目:成绩管理系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

源码获取:博客首页 "资源" 里下载! 一、项目简述 本系统功能包括: 超豪华成绩管理系统,学生,教师,管理员三类用户集 成,课程表管理,成绩查询,成绩详情数据统计…

java隐式声明_变量的显示/隐式声明

显示声明是程序中的一条说明语句,它列出一批变量名并指明这些变量的类型。如C、C、Java中// 显示声明 变量count,类型为int,占用空间大小各语言可能有所不同int count;又如JavaScript中// 显示声明 变量count,但不知其类型&#x…

Java项目:在线小说阅读系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

源码获取:博客首页 "资源" 里下载! 一、项目简述 本系统功能包括: 普通用户端登录注册,小说的分类,日榜,月榜,年榜, 小说的阅读,分章节,小说的评论…

java 格式化日期 注解_理解和使用@DateTimeFormat和@JsonFormat注解

详细的理解参照https://blog.csdn.net/qq_28483283/article/details/81326365两者使用时,都要注意!自己想要的时间类型是什么样的,如果只是用到日期到天,那么格式就是(pattern”yyyy-MM-dd”),想要时分秒的话,那么就要加上HH:mm:ss,因为前后台都需要传数据,所以需要保持一致,否…

Java项目:仿小米商城系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

源码获取:博客首页 "资源" 里下载! 一、项目简述 本系统功能包括: 基于vue Springboot前后端分离项目精简版仿小米商城 系统,注册登录,首页展示,商品展示,商品购买,下单…

Java项目:个人博客系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

源码获取:博客首页 "资源" 里下载! 一、项目简述 本系统功能包括:文章展示、热门文章、文章分类、标签云用户登录评论、匿名评论用户留言、匿名留言评论管理、文章发布、文章管理文章数据统计等等. 二、项目运行 环境…

Java项目:员工管理系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

源码获取:博客首页 "资源" 里下载! 一、项目简述 本系统功能包括:分为前端翻后端部分,包括用户,区分晋通用户以及誉里员用户,包括首页展示,部门管理,人事管理&#xff0c…

Java 多线程抢占 编程_Java多线程编程

编写具有多线程能力的程序经常会用到的方法有:run(),start(),wait(),notify(),notifyAll(),sleep(),yield(),join()还有一个重要的关键字:synchronized本文将对以上内容进行讲解。一:run()和start()示例1:public class ThreadTest…