`

java 实现文件压缩和解压缩

阅读更多

实现了文件的简单压缩、解压缩。主要测试用的里面有一些可能写的比较仓促,如有不适之处还望不吝赐教。

1.解决了中文的问题,应用的不是jdk中的包,而是应用的ant.jar

 代码:

  

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;


public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Test test = new Test(); 
		//test.unzipFiles("D:/xmlZipFils/test.zip");
		test.zipFiles();
	}
	
	/**
	 * 压缩文件
	 */
	public void zipFiles(){
		File fromFiles = new File("d:\\table2xml");
		 if(!fromFiles.exists()){
			 fromFiles.mkdirs();
		 }
		 try {
			//输出流
			 OutputStream os = new FileOutputStream("D:\\xmlZipFils\\test.zip");
			 ZipOutputStream zipos = new ZipOutputStream(os);
			 File  file = null;
			 ZipEntry zipEntry = null;
			 InputStream inputStream = null;
			 File[] files = fromFiles.listFiles(new FileFilter(){
					public boolean accept(File pathname) {
						// TODO Auto-generated method stub
						boolean flag = false;
						if(pathname.getName().indexOf("桥接测试@weibainju_1181")!=-1){
							flag = true;
						}
						return flag;
					}					
				 });
			 doFiles(files,zipos,true);
			 zipos.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 压缩时对文件和目录进行处理
	 * @param 某目录下面的所有文件和目录
	 * @param zip数出流
	 * @param 是否是要压缩的顶级目录
	 */
	public static void  doFiles(File[] files,ZipOutputStream zipos,boolean isFrist){
		InputStream inputStream =null;
		ZipEntry zipEntry = null;
		try {
			for(int i =0;i<files.length;i++){	
				 if(!files[i].isDirectory()){				 
					 inputStream = new FileInputStream(files[i]);
					 if(isFrist==false){
					    zipEntry = new ZipEntry(files[i].getParentFile().getName()+File.separatorChar+files[i].getName());
					 }else{
						 zipEntry = new ZipEntry(files[i].getName()); 
					 }
					 zipos.putNextEntry(zipEntry);
					 int count =0;
					 while((count=inputStream.read())!=-1){
						 zipos.write(count);
					 }		
					 inputStream.close();
				 }else{
					 File[] files1 = files[i].listFiles();
					 doFiles(files1,zipos,false);
				 }				 
			 }			 
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 解压缩文件
	 */
  public  void unzipFiles(String zipFilePath){
	  String outDir = "d:/unzipXml";
	  try {
		File unzipDir = new File(outDir);
		  ZipFile unzipFile = new ZipFile(zipFilePath);
		  Enumeration e = unzipFile.getEntries();
		  InputStream  zipis = null;
		  ZipEntry zipEntry;
		  while(e.hasMoreElements()){
			  zipEntry = (ZipEntry) e.nextElement();
			  zipis =  unzipFile.getInputStream(zipEntry);
			  if(zipEntry.isDirectory()){
				  File file = new File(outDir,zipEntry.getName());
				  if(!file.exists()){
					  file.mkdirs();
				  }
			  }else{
				  if(zipEntry.getName().indexOf("/")>0){
					File file = new File(outDir+File.separatorChar+zipEntry.getName().substring(0,zipEntry.getName().indexOf("/")));
					if(!file.exists()){
						file.mkdirs();
					}
				  }
			      File file = new File(outDir,zipEntry.getName());			      
		          OutputStream os = new FileOutputStream(file);
		          DataOutputStream dos = new DataOutputStream(os);              
		          int count = 0;
		          while((count = zipis.read())!=-1){
		        	    dos.write(count);
		          }
		          zipis.close();
		          os.close();
		          dos.close();
			  }
		  }		  		 
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
  }
}

 

 

本人原创。欢迎转载!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics