Java多文件以ZIP压缩包导出的实现方法

网友投稿 329 2023-01-25


Java多文件以ZIP压缩包导出的实现方法

本文实例为大家分享了java多文件以ZIP压缩包导出的具体代码,供大家参考,具体内容如下

1、使用java实现吧服务器的图片打包成一个zip格式的压缩包导出,多个文件打包导出。

2、代码如下:

**ImageByteUtil.java**

public class ImageByteUtil{

private static float QUALITY = 0.6f;

public static void compressZip(List listfiles, OutputStream output,String encode, boolean compress,String alias){

ZipOutputStream zipStream = null;

try {

zipStream = new ZipOutputStream(output);

for (File file : listfiles){

compressZip(file, zipStream, compress,alias+"_"+(listfiles.indexOf(file)+1));

}

} catch (Exception e) {

e.printStackTrace();

}finally {

try {

if (zipStream != null) {

zipStream.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

private static void compressZip(File file, ZipOutputStream zipStream,

boolean compress,String alias) throws Exception{

FileInputStream input = null;

try {

input = new FileInputStream(file);

//zip(input, zipStream, file.getName(), compress);

zip(input, zipStream, alias+"."+file.getName().substring(file.getName().lastIndexOf(".")+1), compress);

} catch (Exception e) {

e.printStackTrace();

}finally {

try {

if(input != null)

input.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

private static void zip(InputStream input, ZipOutputStream zipStream,

String zipEntryName, boolean compress) throws Exception{

byte[] bytes = null;

BufferedInputStream bufferStream = null;

try {

if(input == null)

throw new Exception("获取压缩的数据项失败! 数据项名为:" + zipEntryName);

// 压缩条目不是具体独立的文件,而是压缩包文件列表中的列表项,称为条目,就像索引一样

ZipEntry zipEntry = new ZipEntry("图片/"+zipEntryName);

// 定位到该压缩条目位置,开始写入文件到压缩包中

zipStream.putNextEntry(zipEntry);

if (compress) {

bytes = ImageByteUtil.compressOfQuality(input, 0);

zipStream.write(bytes, 0, bytes.length);

} else {

bytes = new byte[1024 * 5];// 读写缓冲区

bufferStream = new BufferedInputStream(input);// 输入缓冲流

int read = 0;

while ((read = bufferStream.read(bytes)) != -1) {

zipStream.write(bytes, 0, read);

}

}

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if (null != bufferStream)

bufferStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

public static byte[] compressOfQuality(File file, float quality) throws Exception{

byte[] bs = null;

InputStream input = null;

try {

input = new FileInputStream(file);

bs = compressOfQuality(input,quality);

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (input != null)

input.close();

} catch (IOException e) {

e.printStackTrace();

}

}

return bs;

}

public static bhttp://yte[] compressOfQuality(InputStream input, float quality)

throws Exception {

ByteArrayOutputStream output = null;

try {

output = new ByteArrayOutputStream();

if(quality == 0){

Thumbnails.of(input).scale(1f).outputQuality(QUALITY)

.toOutputStream(output);

} else {

Thumbnails.of(input).scale(1f).outputQuality(quality).toOutputStream(output);

}

return output.toByteArray();

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (output != null)

output.close();

} catch (IOException e) {

e.printStackTrace();

}

}

return null;

}

}

**Main.java**

public static void main(String[] args){

//要导出的文件集合,添加自己需要导出的文件

List ListFiles = new ArrayList<>();

//调用工具类,参数说明(需要导出的文件集,ByteArrayOutputStream对象,编码,是否压缩【true,false】,文件名称前缀)

ImageByteUtil.compressZip(ListFiles, out, "UTF-8", false,"LWJ");

//指定导出格式

ReturnContext.addParam("exportFileName","extFile.zip");

ReturnContext.addParam("mimeType", "zip");

return in;

}

3、此功能是根据在开发过程中项目需要实现的,测试可正常使用,可更改定制。


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

上一篇:对Java字符串与整形、浮点类型之间的相互转换方法总结
下一篇:硬盘无法连接共享文件夹(可以访问共享文件夹不能访问共享盘)
相关文章

 发表评论

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