Java实现创建Zip压缩包并写入文件

网友投稿 303 2022-09-03


Java实现创建Zip压缩包并写入文件

前言

工作中需要把一些数据放到一个zip的压缩包中,可以使用 ZipOutputStream。ZipOutputStream可以将内容直接写入到zip包中。一般创建ZipOutputStream通常是先封装一个FileOutphTFTHPDutStream,然后在每写入一个文件之前,需要先调用一次putNextEntry,然后使用write写入byte[]类型的数据,当写入完毕的时候使用colseEntry来结束这个文件的打包。当然也可以通过ZipOutputStream直接把数据写入压缩包内,在压缩包内构建数据。

使用

public static void filetest() throws IOException {

String txtPath = "D:\\fileTest\\image\\2.txt";

String zipPath = "D:\\fileTest\\image\\2.zip"; //压缩包路径

String str = "http://测试test123abc"; //需要写入的数据

//创建压缩包

ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipPath));

//封装一个文件

FileWriter fileWriter = null;

try {

fileWriter = new Filhttp://eWriter(txtPath);

fileWriter.write(str);

fileWriter.flush();

fileWriter.close();

} catch (IOException e) {

log.error("fileWriter", e);

}

//对上面封装好的文件构建一个FileInputStream

FileInputStream fis = new FileInputStream(txtPath);

//压缩包里创建一个空文件

zipOutputStream.putNextEntry(new ZipEntry("Request.json"));

//写入压缩文件

int len;

byte[] buffer = new byte[1024]; //字节数组大小可调节

//读取fis字节流,转移到buffer字节数组中去,读取后fis为空

while ((len = fis.read(buffer)) > 0) {

zipOutputStream.write(buffer, 0, len);

}

byte[] b = new byte[1024];

int a = fis.read(b);

//关闭压缩包打包

zipOutputStream.closeEntry();

fis.close();

zipOutputStream.flush();

zipOutputStream.close();

}

运行之后,将会创建如下文件:

压缩包内会产生一个叫Request.json文件,如图:

内容与2.txt里的内容一致,为“测试test123abc”。

上述方法是:先创建2.txt,再读取2.txt的内容,导入到压缩包内形成文件。相同的逻辑,我们可以读取任意其他文件,然后把他们放入到压缩包内。

直接将内容导入到压缩包内

当然我们也可以直接将数据导入到压缩包内。实现如下:

public static void filetest() throws IOException {

String zipPath = "D:\\fileTest\\image\\3.zip"; //压缩包路径

String str1 = "测试test123abc"; //需要写入的数据

String str2 = "测试2";

String Name1 = StringUtils.join("文件.json"); //压缩包里的文件

String Name2 = StringUtils.join("file/文件1.json"); //在压缩包里创建filhTFTHPDe目录下的文件

//创建压缩包

ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipPath));

//创建压缩包里的文件

zipOutputStream.putNextEntry(new ZipEntry(Name1));

byte[] bytes1 = str1.getBytes(StandardCharsets.UTF_8);

zipOutputStream.write(bytes1, 0, bytes1.length); //将数据写入到压缩包里的文件里面

zipOutputStream.closeEntry();

zipOutputStream.putNextEntry(new ZipEntry(Name2));

byte[] bytes2 = str2.getBytes(StandardCharsets.UTF_8);

zipOutputStream.write(bytes2, 0, bytes2.length);

zipOutputStream.closeEntry();

zipOutputStream.flush();

zipOutputStream.close();

}

上述是直接将String类型数据转换成byte数组,导入到压缩包内,形成两个文件:

file文件夹里面是文件1.json,里面的内容是“测试2”,文件.json的内容则是“测试test123abc”。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:在单机条件下,MPI4PY与纯Python多进程代码来比较是否有性能优势???
下一篇:Python多进程共享numpy 数组
相关文章

 发表评论

暂时没有评论,来抢沙发吧~