java程序实现对文件的压缩和解压

前提是要导入ant.jar包,可以到官网上下载

下面贴代码

/*
 * 实现文件压缩和解压的功能
 */
import java.io.*;   
import java.util.*;   
import org.apache.tools.zip.*;   
  
public class CompressFile {   
    private static CompressFile instance = new CompressFile();   
    private static final int BUFFEREDSIZE = 1024;    
    private CompressFile() {   
    }   
       
    public static CompressFile getInstance() {   
        return instance;   
    }   
  
    public synchronized void zip(String inputFilename, String zipFilename){   
        try {
        	//调用zip的方法
			zip(new File(inputFilename), zipFilename);
		} catch (Exception e) {
			e.printStackTrace();
		}   
    }   
       
    public synchronized void zip(File inputFile, String zipFilename){   
        ZipOutputStream out = null;
        try {
        	out = new ZipOutputStream(new FileOutputStream(zipFilename));
            zip(inputFile, out, "");   
        } catch (Exception e) {   
            e.printStackTrace();   
        } finally {   
            try {
            	//关闭流,后打开的先关闭
            	if(out != null)
            	{
            		out.close();
            	}	
			} catch (Exception e) {
				e.printStackTrace();
			}   
        }   
    }   
  
    private synchronized void zip(File inputFile, ZipOutputStream out, String base){
    	//如果文件是目录的话
        if (inputFile.isDirectory()) {   
        	//listFiles能够获取当前文件夹下的所有文件和文件夹
            File[] inputFiles = inputFile.listFiles();   
            try {
				out.putNextEntry(new ZipEntry(base + "/"));
				base = base.length() == 0 ? "" : base + "/";   
		        for (int i = 0; i < inputFiles.length; i++) 
		        {
		        	zip(inputFiles[i], out, base + inputFiles[i].getName());
		        }
			} catch (Exception e) {
				e.printStackTrace();
			}   
              
        }else {   
            if (base.length() > 0) {   
                try {
					out.putNextEntry(new ZipEntry(base));
				} catch (IOException e) {
					e.printStackTrace();
				}   
            } else {   
                try {
					out.putNextEntry(new ZipEntry(inputFile.getName()));
				} catch (IOException e) {
					e.printStackTrace();
				}   
            }   
  
            FileInputStream in = null;
			try {
				in = new FileInputStream(inputFile);
				int c;
	            //设置一个缓冲数组
	            byte[] by = new byte[BUFFEREDSIZE];   
	            while ((c = in.read(by)) != -1) 
	            {   
	               out.write(by, 0, c);   
	            }   
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
            	//关闭文件输入流
                try {
                	if(in != null)
                	{
                		in.close();
                	}
				} catch (IOException e) {
					e.printStackTrace();
				}   
            }   
        }   
    }   
    //解压的方法
    public synchronized void unzip(String zipFilename, String outputDirectory){   
        File outFile = new File(outputDirectory); 
        //如果输出文件不存在,创建输出文件以及其目录
        if (!outFile.exists()) {   
            outFile.mkdirs();   
        }   
  
        ZipFile zipFile = null;
		try {
			zipFile = new ZipFile(zipFilename);
		} catch (Exception e) {
			e.printStackTrace();
		}   
        Enumeration en = zipFile.getEntries();   
        ZipEntry zipEntry = null;   
        while (en.hasMoreElements()) {   
            zipEntry = (ZipEntry) en.nextElement();   
            if (zipEntry.isDirectory()) {   
                // mkdir directory   
                String dirName = zipEntry.getName();   
                dirName = dirName.substring(0, dirName.length() - 1);   
                File f = new File(outFile.getPath() + File.separator + dirName);   
                f.mkdirs();   
            } else {   
                // unzip file   
                File f = new File(outFile.getPath() + File.separator + zipEntry.getName());   
                InputStream in = null;
                FileOutputStream out = null;
				try {
					f.createNewFile();
					in = zipFile.getInputStream(zipEntry);
					out = new FileOutputStream(f);
					int c;   
	                byte[] by = new byte[BUFFEREDSIZE];   
	                while ((c = in.read(by)) != -1) 
	                {
	                	out.write(by, 0, c);
	                } 
				} catch (Exception e) {
					e.printStackTrace();
				} finally{
					try {
						if(out != null)
						{
							out.close();
						}
						if(in != null)
						{
							in.close();
						}
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
                       
                }   
            }   
        }   
    }   
  
  
       
    public static void main(String[] args) {      
        CompressFile bean = new CompressFile();      
        try {      
            bean.zip("F:/语音文件", "F:/语音文件.zip");      
            System.out.println("压缩完成");
            bean.unzip("F:/语音文件.zip", "F:/out/语音文件");
            System.out.println("解压完成");
        } catch (Exception e) {      
            e.printStackTrace();      
        }      
    }    
} 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值