JAVA文件压缩
来源:互联网 发布:jquery数据交互 编辑:程序博客网 时间:2024/06/05 02:05
最近工作中用到了文件压缩的功能,整理了一下。文件压缩的实现,可用JDK自带的 java.util.zip.功能,但是压缩时中文会有乱码,用org.apache.tools.zip.下的jar包可解决乱码问题,也可以修改JDK中的jar包,来决绝乱码问题。
文件压缩和解压代码:
package cn.lsh.test;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Enumeration;import org.apache.tools.ant.taskdefs.Mkdir;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipFile;import org.apache.tools.zip.ZipOutputStream;public class FileUtil { //文件压缩 public static void zipFiles(String zipFile,String path, File... srcFiles) throws IOException{ ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile)); FileUtil.zipFiles(zos, path, srcFiles); zos.close(); System.out.println("*********压缩完毕***********"); } public static void zipFiles(ZipOutputStream zos,String path,File... srcFiles){ path = path.replaceAll("\\*", "/"); if(!path.endsWith("/")){ path +="/"; } byte[] buf = new byte[1024]; try { for(int i = 0; i < srcFiles.length; i++){ if(srcFiles[i].isDirectory()){ File[] files = srcFiles[i].listFiles(); String srcPath =srcFiles[i].getName(); srcPath = srcPath.replaceAll("\\*", "/"); if(srcPath.endsWith("/")){ srcPath +="/"; } zos.putNextEntry(new ZipEntry(srcPath+path)); zipFiles(zos, srcPath+path, files); }else{ FileInputStream fis = new FileInputStream(srcFiles[i]); System.out.println(path+srcFiles[i].getName()); zos.putNextEntry(new ZipEntry(path+srcFiles[i].getName())); int len; while((len = fis.read(buf)) > 0){ zos.write(buf,0,len); } zos.closeEntry(); fis.close(); } } } catch (IOException e) { e.printStackTrace(); } } /** * 解压到指定目录 * @param args * @throws IOException */ public static void unZipFiles(String zipPath,String descDir) throws IOException{ //可以写一些校验 unZipFiles(new File(zipPath),descDir); } /** * 解压到指定目录 * @param args * @throws IOException */ private static void unZipFiles(File file, String descDir) { File pathFile = new File(descDir); if(!pathFile.exists()){ pathFile.mkdir(); } try { ZipFile zipFile = new ZipFile(file); for(Enumeration entries = zipFile.getEntries();entries.hasMoreElements();){ ZipEntry zipEntry =(ZipEntry) entries.nextElement(); String zipEmtryName = zipEntry.getName(); InputStream ins = zipFile.getInputStream(zipEntry); String outPath = (descDir+zipEmtryName).replaceAll("\\*", "/"); //判断路径是否存在 File dirFile = new File(outPath.substring(0, outPath.lastIndexOf("/"))); if(!dirFile.exists()){ dirFile.mkdir(); } //判断文件路径是否文件夹,若已上传,不需要解压 if(new File(outPath).isDirectory()){ continue; } System.out.println(outPath); OutputStream outs = new FileOutputStream(outPath); byte[] buf1 = new byte[1024]; int len; while((len=ins.read(buf1))>0){ outs.write(buf1,0,len); } ins.close(); outs.close(); } } catch (IOException e) { e.printStackTrace(); } System.out.println("****************解压完毕**************"); } //test public static void main(String[] args) throws IOException{ /*File[] files =new File[]{ new File("D:/Test/9527.xlsx"), new File("D:/Test/罗顺侯.docx"), new File("D:/Test/京北方.doc") };*/ /*String path = "D:/Test"; File[] files = new File(path).listFiles(); String zipFile ="D:/Test/压缩.zip"; zipFiles(zipFile, "abc", files);*/ //解压测试 File zipFile = new File("D:/Test/压缩.zip"); String descDir = "D:/Test/zipfile/"; unZipFiles(zipFile, descDir); }}
阅读全文
0 0
- Java中的文件压缩
- Java压缩zip文件
- java 实现文件压缩
- java多线程文件压缩
- JAVA 压缩解压文件
- java压缩单个文件
- java 文件压缩 GZIP
- java压缩文件夹/文件
- java 压缩解压缩文件
- java文件压缩
- java文件压缩二
- java文件压缩四
- java文件读写、压缩
- Java 文件压缩
- java压缩、解压缩文件
- java压缩zip文件
- java 文件的压缩
- JAVA文件压缩、解压
- 订单分表分库方案
- Java日期和时间类简介
- awk常用命令---统计某一列标签个数
- 17-8-6周总结(hadoop笔记)
- 【字符串】模拟实现atoi和itoa
- JAVA文件压缩
- 关于JNDI
- 51单片机:io口
- elasticsearch介绍集群,模拟横向扩展节点、节点宕机、改变分片
- 基本类型的赋值、转换问题
- 反射获取属性
- C控制语句之循环语句(一)
- 百练2815:城堡问题题解
- RE:JAVA学习-初入循环