자바 파일 압축 및 압축 풀기
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();
	}
  }
}
  본인 오리지널.전재 환영 합 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.