压缩或解压程序实现_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 压缩或解压程序实现

压缩或解压程序实现

 2013/11/6 19:10:49  风-起-了  程序员俱乐部  我要评论(0)
  • 摘要:现在压缩软件其实已经有了很多,自己现在写的这个只是一个学习的过程。在处理压缩文件的时候,其实重点的就是递归的使用,区分压缩的是文件还是文件夹,并如何处理文件夹下的文件和文件夹。下面就直接把程序贴出来/***@Description:压缩解压文件*/packagecn.lulei.file.zip;importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava
  • 标签:程序 实现 压缩

?

? ? 现在压缩软件其实已经有了很多,自己现在写的这个只是一个学习的过程。

?

? ? 在处理压缩文件的时候,其实重点的就是递归的使用,区分压缩的是文件还是文件夹,并如何处理文件夹下的文件和文件夹。下面就直接把程序贴出来

?

class="java"> /**  
 *@Description: 压缩解压文件
 */ 
package cn.lulei.file.zip;  

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;

public class Zip {
	
	private static int BUFFERSIZE = 32;//缓冲流大小
	private static FileOutputStream fileOutputStream = null;
	private static ZipOutputStream zipOutputStream = null;
	private static byte[] array = new byte[BUFFERSIZE];
	
	/**
	 * @param outputDir
	 * @param outputFileName
	 * @throws Exception
	 * @Date: 2013-8-8  
	 * @Author: lulei  
	 * @Description:打开流
	 */
	private static void openZipOutputStream(String outputDir, String outputFileName) throws Exception{
		fileOutputStream = new FileOutputStream(outputDir + "\\" + outputFileName);
		zipOutputStream = new ZipOutputStream(new BufferedOutputStream(fileOutputStream));
	}
	
	/**
	 * @throws Exception
	 * @Date: 2013-8-8  
	 * @Author: lulei  
	 * @Description:关闭流
	 */
	private static void closeZipOutputStream() throws Exception{
		zipOutputStream.close();
		fileOutputStream.close();
	}
	
	/**
	 * @Date: 2013-8-8  
	 * @Author: lulei  
	 * @Description:缓存清空
	 */
	private static void clearArrayBuffer(){
		array = null;
		array = new byte[BUFFERSIZE];
	}
	
	/**
	 * @param inputFile
	 * @param zipOutputStream
	 * @param base
	 * @param isPrint
	 * @throws Exception
	 * @Date: 2013-8-8  
	 * @Author: lulei  
	 * @Description:压缩文件
	 */
	private static void inputFileStream(File inputFile, ZipOutputStream zipOutputStream, String base,  boolean isPrint) throws Exception{
		BufferedInputStream bufferedInputStream = null;
		FileInputStream fileInputStream = new FileInputStream(inputFile);  
		bufferedInputStream = new BufferedInputStream(fileInputStream, BUFFERSIZE);  
		base = base.length() == 0 ? "" : base + "/";
		if (isPrint) {
        	System.out.println(inputFile + "...");
        }
		ZipEntry zipEntry = new ZipEntry(base + inputFile.getName());
		zipOutputStream.putNextEntry(zipEntry);

		clearArrayBuffer();
		while((bufferedInputStream.read(array, 0, BUFFERSIZE))!=-1){  
			zipOutputStream.write(array, 0, BUFFERSIZE); 
		}   
		bufferedInputStream.close();
	}
	
	/**
	 * @param inputFile
	 * @param zipOutputStream
	 * @param base
	 * @param isPrint
	 * @throws Exception
	 * @Date: 2013-8-8  
	 * @Author: lulei  
	 * @Description:压缩文件夹
	 */
	private static void inputDirectoryStream(File inputFile, ZipOutputStream zipOutputStream, String base,  boolean isPrint) throws Exception {
		File[] files = inputFile.listFiles();
		for (File file : files) {
			if (file.isFile()) {
				//这里实现递归调用
				inputFileStream(file, zipOutputStream, base, isPrint);
			} else {
				String baseN = (base.length() == 0 ? "" : base + "/") + file.getName();
				inputDirectoryStream(file, zipOutputStream, baseN, isPrint);
			}
		}
	}
	
	/**
	 * @param inputDir
	 * @param outputDir
	 * @param outputFileName
	 * @param isPrint
	 * @Date: 2013-8-8  
	 * @Author: lulei  
	 * @Description:压缩文件OR文件夹
	 */
	private static void zip(String inputDir, String outputDir, String outputFileName, boolean isPrint) {
		try {
			File inputFile = new File(inputDir);
			if (!inputFile.exists()) {
				System.out.println("Not found file " + inputDir);
				return;
			}
			File outputFile = new File(outputDir);
			if (!outputFile.exists()) {
				outputFile.mkdirs();
			}
			
			openZipOutputStream(outputDir, outputFileName);
			
			if (inputFile.isDirectory()) {
				inputDirectoryStream(inputFile, zipOutputStream, "", isPrint);
			} else {
				inputFileStream(inputFile, zipOutputStream, "", isPrint);
			}
			
			closeZipOutputStream();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
	/**
	 * @param inputFileName
	 * @param outputDir
	 * @param isPrint
	 * @Date: 2013-8-8  
	 * @Author: lulei  
	 * @Description: 解压文件
	 */
	@SuppressWarnings("rawtypes")
	private static void unZip(String inputFileName, String outputDir, boolean isPrint) {
		try {
			File inputFile = new File(inputFileName);
			if (!inputFile.exists()) {
				System.out.println("Not found file " + inputFileName);
				return;
			}
			File outputFile = new File(outputDir);
			if (!outputFile.exists()) {
				outputFile.mkdirs();
			}
			outputDir = outputDir.endsWith("[/|\\]") ? outputDir : outputDir + "/";
			ZipFile zipFile = null;
			try {
				zipFile = new ZipFile(inputFileName); 
			} catch (ZipException e) {
				System.out.println("File " + inputFileName + " isn't zip");
				return;
			}
            Enumeration enu = zipFile.entries();  
            while(enu.hasMoreElements()){  
                ZipEntry zipEntry = (ZipEntry)enu.nextElement();  
                if(zipEntry.isDirectory()){  
                    new File(outputDir+zipEntry.getName()).mkdirs();  
                    continue;  
                }
                BufferedInputStream bufferedInputStream = new BufferedInputStream(zipFile.getInputStream(zipEntry));  
                File file = new File(outputDir+zipEntry.getName()); 
                if (isPrint) {
                	System.out.println(file + "...");
                }
                File parent = file.getParentFile();  
                if(parent != null && !parent.exists()){  
                    parent.mkdirs();  
                }  
                FileOutputStream fileOutputStream = new FileOutputStream(file);  
                BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream, BUFFERSIZE);  
                clearArrayBuffer(); 
                while((bufferedInputStream.read(array, 0, BUFFERSIZE))!=-1){  
                	bufferedOutputStream.write(array, 0, BUFFERSIZE); 
                }  
                  
                bufferedOutputStream.flush();  
                bufferedOutputStream.close();
                fileOutputStream.close();
                bufferedInputStream.close();  
            } 
            
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
	/**
	 * @param fileName
	 * @param isZip
	 * @Date: 2013-8-8  
	 * @Author: lulei  
	 * @Description: 解压OR压缩文件,不显示进度
	 */
	public static void zipOrUnZip(String fileName, boolean isZip) {
		zipOrUnZip(fileName, isZip, false);
	}
	
	/**
	 * @param fileName
	 * @param isZip
	 * @param isPrint
	 * @Date: 2013-8-8  
	 * @Author: lulei  
	 * @Description: 解压OR压缩文件,显示进度
	 */
	public static void zipOrUnZip(String fileName, boolean isZip, boolean isPrint) {
		File inputFile = new File(fileName);
		if (!inputFile.exists()) {
			System.out.println("Not found file " + fileName);
			return;
		}
		String outputDir = inputFile.getParent();
		if (isZip) {
			String outputFileName = inputFile.getName() + ".zip";
			zip(fileName, outputDir, outputFileName, isPrint);
		} else {
			int i = inputFile.getName().indexOf(".");
			if (i >= 0) {
				outputDir += inputFile.getName().substring(0, i);
				unZip(fileName, outputDir, isPrint);
			} else {
				System.out.println("File " + fileName + " isn't zip");
				return;
			}
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub  
		Zip.zipOrUnZip("f:/outdoc", true, true);
		Zip.zipOrUnZip("f:/outdoc.zip", false, true);
	}
}

?

最后可以直接调用zipOrUnZip()方法来实现压缩和解压功能即可

发表评论
用户名: 匿名