java实现单个文件多个文件的zip压缩

java实现压缩单个文件和多个文件

已经解决乱码问题,需要下载ant.jar 包

package com.jz.zip;
/**
 * @ClassName:     ZipFile.java
 * @Description:   TODO(用一句话描述该文件做什么) 
 * 
 * @author         Administrator
 * @E-mail         809044093@qq.com 
 * @version        V1.0  
 * @Date           2014-3-24 上午11:30:58 
 */
 


import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.IOException;  
  
/*  
 * 采用JDK API中自带的类时压缩的文件会出现中文乱码  
 */  
//import java.util.zip.ZipEntry;  
//import java.util.zip.ZipOutputStream;  
  
/*  
 * 采用ANT中ant.jar包的类可以解决中文乱码问题  
 */  
import org.apache.tools.zip.ZipEntry;  
import org.apache.tools.zip.ZipOutputStream;  
import org.junit.Test;
  
/**  
 *Module:          ZipFileUtil.java  
 *Description:    用zip对单个和多个文件进行压缩  
 *Company:       xxx  
 *Version:          1.0.0  
 *Author:           pantp  
 *Date:              May 24, 2012  
 */  
public class ZipFile {  
  
    public static void main(String[] args) throws Exception {  
    	System.setProperty("sun.zip.encoding", System.getProperty("sun.jnu.encoding"));
    	System.out.println(System.getProperty("sun.zip.encoding")); //ZIP编码方式  
        System.out.println(System.getProperty("sun.jnu.encoding")); //当前文件编码方式  
        System.out.println(System.getProperty("file.encoding")); //这个是当前文件内容编码方式    
        
    }  
    
    
    /**
     * 
     * @Title: testMethod
     * @Description: TODO(JUnit测试1)
     * @param:    
     * @return: void   
     * @throws
     */
    @Test
    public  void  testMethod(){
    	 /*  
         * 测试单个文件的ZIP压缩   
         * 指定文件路径可以是绝对路径,也可以是相对路径  
         */  
        String file = "src/zip/文件1.txt";  
        String zipFile1 = "src/zip/单个文件压缩.zip";  
        boolean flag1;
		try {
			flag1 = zipSingleFile(file, zipFile1);
			 System.out.println("\n**************压缩【单】个文件<author:pantp>******************************\n");  
		        if (flag1) {  
		            System.out.println("单个文件ZIP压缩成功,压缩后文件所在路径为:"+zipFile1);  
		        } else {  
		            System.out.println("单个文件ZIP压缩失败");  
		        }  
		        System.out.println("\n*******************************************************************************");  
		    	
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  
       
    }
    /**
     * 
     * @Title: testMethod2
     * @Description: TODO(测试2)
     * @param:    
     * @return: void   
     * @throws
     */
    @Test
    public void testMethod2(){
    	
    	/*  
         * 测试多个文件的ZIP压缩  
         * 指定文件路径可以是绝对路径,也可以是相对路径  
         */  
        String files[] = { "src/zip/文件1.txt", "src/zip/file2.txt" };  
        String zipFile2 = "src/zip/多个文件压缩.zip";  
        boolean flag2;
		try {
			flag2 = zipFiles(files, zipFile2);
			System.out.println("\n**************压缩【多】个文件<author:pantp>******************************\n");  
		        if (flag2) {  
		            System.out.println("多个文件ZIP压缩成功,压缩后文件所在路径为:"+zipFile2);  
		        } else {  
		            System.out.println("多个文件ZIP压缩失败");  
		        }  
		        System.out.println("\n*******************************************************************************");  
		    
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  
       
    }
    
    
  
    /**  
     *<p>  
     *@param  file 待压缩文件的名称 例如,src/zip/文件1.txt  
     *@param  zipFile 压缩后文件的名称 例如,src/zip/单个文件压缩.zip  
     *@return boolean  
     *@throws :IOException  
     *@Function: zipSingleFile  
     *@Description:单个文件的压缩  
     *@version : v1.0.0  
     *@author: pantp  
     *@Date:May 24, 2012  
     *</p>  
     *Modification History:  
     * Date                     Author          Version         Description  
     * ---------------------------------------------------------------------  
     * May 24, 2012        pantp           v1.0.0           Create  
     */  
    public static boolean zipSingleFile(String file, String zipFile)  
            throws IOException {  
        boolean bf = true;  
        File f = new File(file);  
        if (!f.exists()) {  
            System.out.println("文件不存在");  
            bf = false;  
        } else {  
            File ff = new File(zipFile);  
            if (!f.exists()) {  
                ff.createNewFile();  
            }  
            // 创建文件输入流对象  
            FileInputStream in = new FileInputStream(file);  
            // 创建文件输出流对象  
            FileOutputStream out = new FileOutputStream(zipFile);  
            // 创建ZIP数据输出流对象  
            ZipOutputStream zipOut = new ZipOutputStream(out); 
            //设置文件名编码方式
            zipOut.setEncoding(System.getProperty("sun.jnu.encoding")); 
            // 得到文件名称  
            String fileName = file.substring(file.lastIndexOf('/') + 1, file.length());  
            // 创建指向压缩原始文件的入口  
            ZipEntry entry = new ZipEntry(fileName);  
            zipOut.putNextEntry(entry);  
            // 向压缩文件中输出数据  
            int number = 0;  
            byte[] buffer = new byte[512];  
            while ((number = in.read(buffer)) != -1) {  
                zipOut.write(buffer, 0, number);  
            }  
            zipOut.close();  
            out.close();  
            in.close();  
        }  
        return bf;  
    }  
  
    /**  
     *<p>  
     *@param files    待压缩的文件列表 例如,src/zip/文件1.txt, src/zip/file2.txt  
     *@param zipfile 压缩后的文件名称 例如,src/zip/多个文件压缩.zip  
     *@return boolean  
     *@throws :Exception  
     *@Function: zipFiles  
     *@Description:多个文件的ZIP压缩  
     *@version : v1.0.0  
     *@author: pantp  
     *@Date:May 24, 2012  
     *</p>  
     *Modification History:  
     * Date                     Author          Version         Description  
     * ---------------------------------------------------------------------  
     * May 24, 2012        pantp           v1.0.0           Create  
     */  
    public static boolean zipFiles(String[] files, String zipfile)  
            throws Exception {  
        boolean bf = true;  
  
        // 根据文件路径构造一个文件实例  
        File ff = new File(zipfile);  
        // 判断目前文件是否存在,如果不存在,则新建一个  
        if (!ff.exists()) {  
            ff.createNewFile();  
        }  
        // 根据文件路径构造一个文件输出流  
        FileOutputStream out = new FileOutputStream(zipfile);  
        // 传入文件输出流对象,创建ZIP数据输出流对象  
        ZipOutputStream zipOut = new ZipOutputStream(out);  
        //设置文件名编码方式
        zipOut.setEncoding(System.getProperty("sun.jnu.encoding")); 
        // 循环待压缩的文件列表  
        for (int i = 0; i < files.length; i++) {  
            File f = new File(files[i]);  
            if (!f.exists()) {  
                bf = false;  
            }  
            try {  
                // 创建文件输入流对象  
                FileInputStream in = new FileInputStream(files[i]);  
                // 得到当前文件的文件名称  
                String fileName = files[i].substring(  
                        files[i].lastIndexOf('/') + 1, files[i].length());  
                System.out.println(fileName+"压缩文件的入口");
                // 创建指向压缩原始文件的入口  
                ZipEntry entry = new ZipEntry(fileName);  
                zipOut.putNextEntry(entry);  
                // 向压缩文件中输出数据  
                int nNumber = 0;  
                byte[] buffer = new byte[512];  
                while ((nNumber = in.read(buffer)) != -1) {  
                    zipOut.write(buffer, 0, nNumber);  
                }  
                // 关闭创建的流对象  
                in.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
                bf = false;  
            }  
        }  
        zipOut.close();  
        out.close();  
        return bf;  
    }  
      
}  


























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java调用Zip类批量压缩多个文件,此前有一个是压缩单个文件,也可参考,相关代码中可找到此源码。   public class ZipDemo extends JFrame{   JFileChooser fileChooser; //文件选择器   JList fileList; //待压缩文件列表   Vector files; //文件数据(待压缩文件)   JButton jbAdd; //增加文件按钮   JButton jbDelete; //删除文件按钮   JButton jbZip; //压缩按钮   JTextField target; //目标文件文本域   public ZipDemo(){   super("用ZIP压缩多个文件"); //调用父类构造函数   fileChooser=new JFileChooser(); //实例化文件选择器   files=new Vector(); //实例化文件数据Vector   fileList=new JList(files); //实例化已选择文件列表   jbAdd=new JButton("增加"); //实例化按钮组件   jbDelete=new JButton("删除");   jbZip=new JButton("压缩");   target=new JTextField(18);   JPanel panel=new JPanel(); //实例化面板,用于容纳按钮   panel.add(jbAdd); //增加组件到面板上   panel.add(jbDelete);   panel.add(jbZip);   JPanel panel2=new JPanel();   panel2.add(new JLabel("目标文件"));   panel2.add(target);   JScrollPane jsp=new JScrollPane(fileList);   Container container=getContentPane(); //得到容器   container.add(panel2,BorderLayout.NORTH); //增加组件到容器   container.add(jsp,BorderLayout.CENTER);   container.add(panel,BorderLayout.SOUTH);   jsp.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); //设置边界
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

prefectjava

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值