Java实现创建Zip压缩包并写入文件
程序员文章站
2024-01-01 15:08:52
前言工作中需要把一些数据放到一个zip的压缩包中,可以使用 zipoutputstream。zipoutputstream可以将内容直接写入到zip包中。一般创建zipoutputstream通常是先...
前言
工作中需要把一些数据放到一个zip的压缩包中,可以使用 zipoutputstream。zipoutputstream可以将内容直接写入到zip包中。一般创建zipoutputstream通常是先封装一个fileoutputstream,然后在每写入一个文件之前,需要先调用一次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 = "测试test123abc"; //需要写入的数据 //创建压缩包 zipoutputstream zipoutputstream = new zipoutputstream(new fileoutputstream(zippath)); //封装一个文件 filewriter filewriter = null; try { filewriter = new filewriter(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"); //在压缩包里创建file目录下的文件 //创建压缩包 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”。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。