博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹
阅读量:5268 次
发布时间:2019-06-14

本文共 3151 字,大约阅读时间需要 10 分钟。

一、简述

  zip用于压缩和解压文件。使用到的类有:ZipEntry  ZipOutputStream

二、具体实现代码

package com.joyplus.test;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;/** * @author  * 将文件中所有文件及文件夹压缩 * source:  文件源的路径 * dest:    压缩文件存放路径 */public class zipFiletest1 {        //获取文件源中的所有文件    private List
getSourceAllFiles(String from){ List
fileList=new ArrayList<>(); File fromfile=new File(from); File[] fileArr=fromfile.listFiles(); for (File file : fileArr) { if(file.isFile()){ fileList.add(file); }else{ //利用递归之法,获取路径中子路径中的所有文件 fileList.addAll(getSourceAllFiles(file.getPath())); } } return fileList; } //得到文件在文件夹中的相对路径 保持原有结构 (也可以根据需求自己创建新的结构) private String getRelName(String from,File f){ String name=null; name=f.getAbsolutePath().replace(from+"\\", ""); name=name.replace("\\", "/"); System.out.println("文件相对路径是:"+name); return name; } //创建一个压缩文件,并存放到新的路径中 public void createZipFile(String from,String dest){ List
fileList=getSourceAllFiles(from); ZipOutputStream zout=null; //生成Zip输出流 try { zout=new ZipOutputStream(new FileOutputStream(new File(dest))); //将每个文件放入Zip流中 for (File f : fileList) { InputStream is=new FileInputStream(f); String name=getRelName(from, f); //获取文件相对路径 保持文件原有结构 ZipEntry en=new ZipEntry(new File(from).getName()+"/"+name);           // ZipEntry ens=new ZipEntry(f.getName()); //这样只是把单独的文件压缩,不再有之前的结构 en.setSize(f.length()); zout.putNextEntry(en); zout.setComment("test"); //读取文件中的内容 int len=0; byte[] buffer=new byte[1024]; while((len=is.read(buffer))!=-1){ zout.write(buffer,0,len); } zout.flush(); is.close(); } zout.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(zout!=null){ try { zout.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void main(String[] args) { zipFiletest1 test=new zipFiletest1(); test.createZipFile("D:\\EDI_MULIT_DOWNLOAD\\5fd0998a07c84d9d924076f64fb726a7", "D:\\sumZip\\co.zip"); }}

 注意:ZipEntry 与ZipOutputStream 不是用的java自带的类,import org.apache.tools.zip.*。java的java.util.zip包里也有这两个类,不过对中文的支持不佳,文件的注释与生成的文件名都不能用中文,否则乱码,不过对文件的内容不影响。

转载于:https://www.cnblogs.com/renxiaoren/p/5265808.html

你可能感兴趣的文章
国外常见互联网盈利创新模式
查看>>
android 签名
查看>>
android:scaleType属性
查看>>
mysql-5.7 innodb 的并行任务调度详解
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
Js时间处理
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Linux中防火墙centos
查看>>
如何设置映射网络驱动器的具体步骤和方法
查看>>
centos下同时启动多个tomcat
查看>>
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>
Leetcode Balanced Binary Tree
查看>>
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
多线程《三》进程与线程的区别
查看>>
linux sed命令
查看>>
html标签的嵌套规则
查看>>
湖南多校对抗赛(2015.03.28) H SG Value
查看>>
hdu1255扫描线计算覆盖两次面积
查看>>