`

java压缩和解压zip

 
阅读更多

ZipEntry、ZipInputStream和ZipOutputStream三个Java类实现zip数据压缩方式的编程方法。

  zip压缩文件结构:一个zip文件由多个entry组成,每个entry有一个唯一的名称,entry的数据项存储压缩数据

  与zip文件有关的几个Java类 
  ・类ZipEntry

  public ZipEntry(String name); 

  name为指定的数据项名。 
  ・类ZipOutputStream 
  ZipOutputStream实现了zip压缩文件的写输出流,支持压缩和非压缩entry。下面是它的几个函数:

  public ZipOutputStream(OutputStream out); 
  ∥利用输出流out构造一个ZIP输出流。 
  public void setMethod(int method); 
  ∥设置entry压缩方法,缺省值为DEFLATED。 
  public void putNextEntry(ZipEntry newe); 
  ∥如果当前的entry存在且处于激活状态时,关闭它,在zip文件中写入新的entry-newe 
  并将数据流定位于entry数据项的起始位置,压缩方法为setMethod指定的方法。

  ・类ZipInputStream 
  ZipInputStream实现了zip压缩文件的读输入流,支持压缩和非压缩entry。下面是它的 
  几个函数:

  public ZipInputStream(InputStream in); 
  ∥利用输入流in构造一个ZIP输出流。 
  public ZipEntry getNextEntry(); 
  ∥返回ZIP文件中的下一个entry,并将输出流定位在此entry数据项的起始位置。 
  public void closeEntry(); 
  ∥关闭当前的zip entry,并将数据流定位于下一个entry的起始位置。

 

需要导入ant.jar包

 

下面是压缩的:

package org.cfsdc.action;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import org.apache.struts2.ServletActionContext;

public class Test {

	public static void main(String[] args) throws Exception {
	
		String inputpath = "D:\\zipTest";
		String zipOutpath = "D:\\ziptest.zip";
		zipTest(inputpath,zipOutpath);
                  unZip ( "D:\\ziptest.zip" , "D://opt" );
	}

	
	private static void zipTest(String inputpath, String zipFile) throws IOException {
		ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile));
		File inputpathFile = new File(inputpath);
		
		
		if(inputpathFile.exists() && inputpathFile.isDirectory()){
			
			File[] inputs = inputpathFile.listFiles();
			for(File i :inputs){
			
				out.putNextEntry(new ZipEntry(i.getName()));
				getZip(i.getAbsoluteFile(),out);
			}
		}
		out.flush();
		out.close();
	}

	private static void getZip(File absoluteFile, ZipOutputStream out) throws IOException {

		InputStream input = new FileInputStream(absoluteFile);//这里只能输入文件
		byte[] buffer = new byte[2048];
		int len=-1;
		while((len=input.read(buffer))!= -1){
			out.write(buffer, 0, len);
		}
		
		
		
	}
	
	
	
	
	
	}

 

 

下面是解压的方法

/**
	 * 解压
	 */
	 public static void unZip(String zipfile, String destDir) {
		 
	       destDir = destDir.endsWith( "//" ) ? destDir : destDir + "//" ;
	       byte b[] = new byte [1024];
	       int length;
	 
	       ZipFile zipFile;
	       try {
	           zipFile = new ZipFile( new File(zipfile));
	           Enumeration enumeration = zipFile.getEntries();
	           ZipEntry zipEntry = null ;
	 
	           while (enumeration.hasMoreElements()) {
	              zipEntry = (ZipEntry) enumeration.nextElement();
	              File loadFile = new File(destDir + zipEntry.getName());
	 
	              if (zipEntry.isDirectory()) {
	                  // 这段都可以不要,因为每次都貌似从最底层开始遍历的
	                  loadFile.mkdirs();
	              } else {
	                  if (!loadFile.getParentFile().exists())
	                     loadFile.getParentFile().mkdirs();
	 
	                  OutputStream outputStream = new FileOutputStream(loadFile);
	                  InputStream inputStream = zipFile.getInputStream(zipEntry);
	                  
	 
	                  while ((length = inputStream.read(b)) > 0)
	                     outputStream.write(b, 0, length);
	 
	              }
	           }
	           System. out .println( " 文件解压成功 " );
	       } catch (IOException e) {
	           // TODO Auto-generated catch block
	           e.printStackTrace();
	       }
	 
	    }

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics