7ZIP压缩

来源:互联网 发布:31岁转行做数据分析师 编辑:程序博客网 时间:2024/04/30 00:13

java生成rar zip或者解压缩 

2011-08-24 14:22:19|  分类:__java|  标签:|字号订阅

在java中对rar文件进行操作,个人人为,资料还是比较少的。

最近用到,可以使用7zip来搞定,主要使用了sevenzip4j.jar和J7Zip.jar两个jar。

下面只是个压缩的例子,用到的时候,再补充上解压缩的例子。

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.List;

import org.sevenzip4j.SevenZipArchiveOutputStream;

import org.sevenzip4j.archive.SevenZipEntry;

/**

*压缩生成7z格式工具类

*/

publicclass SevenZip {

   privatestatic SevenZipzipInstance;

   publicstatic Stringencoding ="utf-8";

   private SevenZip() {}

   

   publicstatic SevenZip getZip() {

       if (zipInstance ==null) {

           zipInstance =new SevenZip();

        }

       returnzipInstance;

    }

   /**

     *

     *将多个文件或者文件夹压缩成指定名称的zip压缩文件

     *

     *@param inputFile需压缩文件

     *@param zipFilename输出文件及详细路径

     *@throws IOException

     */

   publicsynchronizedvoid zip(List<String> inputFile, String zipFilename)throws IOException {

        SevenZipArchiveOutputStream out =new SevenZipArchiveOutputStream(

               new FileOutputStream(zipFilename));

       // out.setEncoding(encoding);

       try {

           for (String f : inputFile) {

                File file =new File(f);

                zip(file, out, file.isDirectory() ? file.getName() :"");

            }

        }catch (IOException e) {

           throw e;

        }finally {

            out.finish();

            out.close();

        }

    }

   /**

     *

     *将多个文件或者文件夹压缩成指定名称的zip压缩文件

     *

     *@param inputFile需要压缩的文件

     *@param zipFilename压缩文件路径

     *@throws IOException

     */

   publicsynchronizedvoid zip(File[] inputFile, String zipFilename)

           throws IOException {

        SevenZipArchiveOutputStream out =new SevenZipArchiveOutputStream(

               new FileOutputStream(zipFilename));

       try {

           for (File f : inputFile)

                zip(f, out, f.isDirectory() ? f.getName() :"");

        }catch (IOException e) {

           throw e;

        }finally {

            out.finish();

            out.close();

        }

    }

   /**

     *

     *将单个文件或者文件夹压为ZIP文件

     *

     *@param inputFile文件夹或者文件

     *@param zipFilename压缩文件名称

     *@throws IOException

     */

   publicsynchronizedvoid zip(File inputFile, String zipFilename)

           throws IOException {

        SevenZipArchiveOutputStream out =new SevenZipArchiveOutputStream(

               new FileOutputStream(zipFilename));

       // out.setEncoding(encoding);

       try {

            zip(inputFile, out, inputFile.isDirectory() ? inputFile.getName():"");

        }catch (IOException e) {

           throw e;

        }finally {

            out.finish();

            out.close();

        }

    }

   /**

     *

     *压缩zip格式的压缩文件

     *

     *@param inputFile需压缩文件

     *@param out输出压缩文件

     *@param base结束标识

     *@throws IOException

     */

   privatesynchronizedvoid zip(File inputFile,

            SevenZipArchiveOutputStream out, String base)throws IOException {

       if (inputFile.isDirectory()) {

           if (inputFile.list().length == 0) {

                SevenZipEntry sevenEntry =new SevenZipEntry();

               setSevenZipEntryAttributes(inputFile, sevenEntry);

                sevenEntry.setName(base);

                sevenEntry.setSize(0);

                out.putNextEntry(sevenEntry);

            }else {

                base = base.length() == 0 ?"" : base +"/";

                File[] inputFiles = inputFile.listFiles();

               for (int i = 0; i < inputFiles.length; i++) {

                    zip(inputFiles[i], out, base + inputFiles[i].getName());

                }

            }

        }else {

           if (base.length() > 0) {

                SevenZipEntry sevenEntry =new SevenZipEntry();

               setSevenZipEntryAttributes(inputFile, sevenEntry);

                sevenEntry.setName(base);

                out.putNextEntry(sevenEntry);

               copy(out,new FileInputStream(inputFile));

            }else {

                SevenZipEntry sevenEntry =new SevenZipEntry();

               setSevenZipEntryAttributes(inputFile, sevenEntry);

                out.putNextEntry(sevenEntry);

               copy(out,new FileInputStream(inputFile));

            }

        }

    }

   privatestaticvoid setSevenZipEntryAttributes(File file,

            SevenZipEntry sevenEntry) {

        sevenEntry.setName(file.getName());

        sevenEntry.setSize(file.length());

        sevenEntry.setLastWriteTime(file.lastModified());

        sevenEntry.setReadonly(!file.canWrite());

        sevenEntry.setHidden(file.isHidden());

        sevenEntry.setDirectory(file.isDirectory());

        sevenEntry.setArchive(true);

        sevenEntry.setSystem(false);

    }

   privatestaticvoid copy(OutputStream out, InputStream in)

           throws IOException {

       byte[] buf =newbyte[1024];

       int i = 0;

       while ((i = in.read(buf)) != -1) {

            out.write(buf, 0, i);

        }

    }

   publicstaticvoid main(String[] args)throws Exception {

        String path = System.getProperty("user.dir");

        String pathName = path +"\\output\\gznewzhaiyao0822";

       //zip

        SevenZip zip = SevenZip.getZip();

        zip.zip(new File(pathName),"d:\\gznewzhaiyao0822.rar");

    }

转:http://ligang6383.blog.163.com/blog/static/37729477201172422219656/

原创粉丝点击