java 압축 풀기

더 읽 기
최근 에 자바 로 압축 하 는 예 를 보 았 습 니 다. 스스로 정리 하고 싶 습 니 다. 이 방법 은 압축 파일 을 압축 해제 하고 파일 이름 에 test. zip 을 넣 을 수 있 습 니 다. test. zip 안에 얼마나 많은 파일 과 폴 더 가 있 든 지 간 에 압축 을 풀 수 있 습 니 다. 압축 을 푼 파일 을 test. zip 코드 로 압축 할 수 있 습 니 다. 다음 과 같 습 니 다.
package bean;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

import javax.swing.text.html.parser.Entity;

public class FileCompressAndUnCompress {
	public static boolean fileUnCompress(String inputFilePath, String outputDirectory){
		boolean flag = true;    //                  
		ZipInputStream zis = null;    // zip   
		ZipFile zfile = null;    //     
		try {
			zfile = new ZipFile(new File(inputFilePath));
			zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(inputFilePath)));
		} catch (FileNotFoundException e) {
			flag = false;
			e.printStackTrace();
		} catch (ZipException e) {
			flag = false;
			e.printStackTrace();
		} catch (IOException e) {
			flag = false;
			e.printStackTrace();
		}
		ZipEntry zipEntry = null;
		//   zip      
		try {
			while((zipEntry = zis.getNextEntry()) != null){
				//    zip           
				if(zipEntry.isDirectory()){
					String directorName = zipEntry.getName();
					File director = new File(outputDirectory + directorName);
					director.mkdir();
				}else{
					File file = new File(outputDirectory + File.separator + zipEntry.getName());
					//     
					file.createNewFile();
					//         
					InputStream is = zfile.getInputStream(zipEntry);
					//       
					FileOutputStream fos = new FileOutputStream(file);
					//         
					byte [] byteBuffer=new byte[1024*8];
					int i = -1;
					while((i = is.read(byteBuffer)) != -1){
						fos.write(byteBuffer,0,i);
					}
					is.close();
					fos.close();
				}
			}		
			} catch (IOException e) {
			flag = false;
			e.printStackTrace();
		}
		return flag;
	}
	public static boolean fileCompress(File file,String basePath,ZipOutputStream zos){
		boolean flag = true;    //         
	    //                 zip      ,       zip  
		if(file.isDirectory()){
			//           
			File [] files = file.listFiles();
			for(File f:files){
				try {
					zos.putNextEntry(new ZipEntry(basePath + File.separator));
				} catch (IOException e) {
					flag = false;
					e.printStackTrace();
				}
				basePath = basePath.length() == 0 ? "" : basePath + "/";
				//     
				fileCompress(f,basePath + f.getName(), zos);
			}
		}else{
			try {
				if(basePath.length()>0){
					zos.putNextEntry(new ZipEntry(basePath));
				}else{
					zos.putNextEntry(new ZipEntry(basePath+ file.getName()));
				}
				
				FileInputStream fis = new FileInputStream(file);
				//         
				byte [] byteBuffer=new byte[1024*8];
				int i = -1;
				while((i = fis.read(byteBuffer)) != -1){
					zos.write(byteBuffer,0,i);
				}
				zos.closeEntry();
				fis.close();
			} catch (IOException e) {
				flag = false;
				e.printStackTrace();
			}
		}
		return flag;
	}
	public static void main(String[] args) throws Exception {
		ZipOutputStream zos =new ZipOutputStream(new FileOutputStream("D:\\test\\unzipApk\\temp.zip"));
		File zipFile = new File("D:\\test\\unzipApk\\temp.zip");
		zipFile.getParentFile().mkdirs();
		//fileUnCompress("D:\\test\\unzipApk\\temp.zip", "D:\\test\\unzipApk\\");
		File file = new File("D:\\test\\unzipApk\\temp");
		fileCompress(file,"temp",zos);
		zos.close();
	}

}

좋은 웹페이지 즐겨찾기