java实现文件打包压缩处理
来源:互联网 发布:mysql两个表的添加语句 编辑:程序博客网 时间:2024/06/06 04:03
package testZip;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.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;public class ZipMultiDirectoryCompress {public static String getFileModiefLast(File file){ Date d= new Date(file.lastModified()); DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); String date = df.format(d); System.out.println("FileModieflast---"+date); return date;} public static void main(String[] args) { //初始化支持多级目录压缩的ZipMultiDirectoryCompress ZipMultiDirectoryCompress zipCompress = new ZipMultiDirectoryCompress(); //压缩目录,可以指向一个文件 String directory = "D:\\workspace\\JMS\\WebRoot\\中文文件.txt"; //生成的压缩文件 String destFile = "D:\\workspace\\JMS\\WebRoot\\中文.zip"; //默认的相对地址,为根路径 String defaultParentPath = ""; ZipOutputStream zos = null; try { //创建一个Zip输出流 zos = new ZipOutputStream(new FileOutputStream(destFile)); //启动压缩进程 zipCompress.startCompress(zos,defaultParentPath,directory); } catch (FileNotFoundException e){ e.printStackTrace(); } finally{ try { if(zos != null)zos.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 开始压缩. * * @param zos ZipOutputStream * @param oppositePath 相对路径,开始时相对路径为空 * @param directory 压缩目录,也可能是文件 */ public void startCompress(ZipOutputStream zos, String oppositePath, String directory){ File file = new File(directory); if(file.isDirectory()){ //如果是压缩目录 File[] files = file.listFiles(); for(int i=0;i<files.length;i++){ File aFile = files[i]; if(aFile.isDirectory()){ //如果是目录,修改相对地址 String newOppositePath = oppositePath + aFile.getName() + "/"; //创建目录 compressDirectory(zos, oppositePath, aFile); //进行递归调用 startCompress(zos,newOppositePath,aFile.getPath()); } else { //如果不是目录,则进行压缩 compressFile(zos,oppositePath,aFile); } } } else { //如果是压缩文件,直接调用压缩方法进行压缩 compressFile(zos,oppositePath,file); } } /** * 压缩文件. * * @param zos ZipOutputStream * @param oppositePath 相对于路路径 * @param file 压缩的文件 */ public void compressFile(ZipOutputStream zos, String oppositePath, File file){ //创建一个Zip条目,每个Zip条目都是必须相对于根路径 ZipEntry entry = new ZipEntry(oppositePath + file.getName()); InputStream is = null; try{ //将条目保存到Zip压缩文件当中 zos.putNextEntry(entry); //从文件输入流当中读取数据,并将数据写到输出流当中. is = new FileInputStream(file); int length = 0; int bufferSize = 1024; byte[] buffer = new byte[bufferSize]; while((length=is.read(buffer,0,bufferSize))>=0){ zos.write(buffer, 0, length); } zos.closeEntry(); }catch(IOException ex){ ex.printStackTrace(); } finally { try{ if(is != null)is.close(); }catch(IOException ex){ ex.printStackTrace(); } } } /** * 在压缩文件当中创建一个新的压缩目录,支持空目录. * * @param zos * @param oppositePath * @param file */ public void compressDirectory(ZipOutputStream zos, String oppositePath, File file){ //压缩目录,这是关键,创建一个目录的条目时,需要在目录名后面加多一个"/" ZipEntry entry = new ZipEntry(oppositePath + file.getName() + "/"); try { zos.putNextEntry(entry); zos.closeEntry(); } catch (IOException e) { e.printStackTrace(); } }}