`
libin0019
  • 浏览: 234039 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Java处理压缩包

 
阅读更多

代码源地址:http://sourceforge.net/p/sevenzipjbind/discussion/757964/thread/b64a36fb

支持压缩格式:- 7z, Zip, Tar, Rar, Lzma, Iso, GZip, Cpio, BZIP2, Z, Arj, Lzh, Cab, Chm, Nsis, DEB, RPM, UDF, WIM

 

代码如下:

package com.neusoft;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.logging.Logger;

import net.sf.sevenzipjbinding.ExtractAskMode;
import net.sf.sevenzipjbinding.ExtractOperationResult;
import net.sf.sevenzipjbinding.IArchiveExtractCallback;
import net.sf.sevenzipjbinding.ISequentialOutStream;
import net.sf.sevenzipjbinding.ISevenZipInArchive;
import net.sf.sevenzipjbinding.PropID;
import net.sf.sevenzipjbinding.SevenZip;
import net.sf.sevenzipjbinding.SevenZipException;
import net.sf.sevenzipjbinding.impl.RandomAccessFileInStream;

/** 
 * <p>Description: [压缩文件工具包]</p>
 * @author  <a href="mailto: li.bb@xxx.com">李彬彬</a>
 * @version $Revision$ 
 */
public class ZipTools
{
    private static Logger logger = Logger.getLogger(ZipTools.class.getCanonicalName());

    /**
     * <p>Discription:[将解压文件解压到指定目录下]</p>
     * @param file 文件全路径
     * @param extractPath 解压后文件存往路径 -支持压缩格式: 7Z,ZIP,TAR,RAR,LZMA,ISO,GZIP,BZIP2,CPIO,Z,ARJ,LZH,CAB,CHM,NSIS,DEB,RPM,UDF,WIM
     * @throws SevenZipException
     * @throws IOException
     * @author:[李彬彬]
     * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
     */
    public void extract(String file, String extractPath) throws SevenZipException, IOException
    {
        ISevenZipInArchive inArchive = null;
        RandomAccessFile randomAccessFile = null;
        try
        {
            randomAccessFile = new RandomAccessFile(new File(file), "r");
            inArchive = SevenZip.openInArchive(null, new RandomAccessFileInStream(randomAccessFile));
            inArchive.extract(null, false, new ExtractCallback(inArchive, extractPath));
        }
        finally
        {
            if (inArchive != null)
            {
                inArchive.close();
            }
            if (randomAccessFile != null)
            {
                randomAccessFile.close();
            }
        }
    }

    /** 
     * <p>Description: [提后文件后回调方法]</p>
     * @author  <a href="mailto: li.bb@neusoft.com">李彬彬</a>
     * @version $Revision$ 
     */
    private class ExtractCallback implements IArchiveExtractCallback
    {
        private final ISevenZipInArchive inArchive;

        private final String extractPath;

        public ExtractCallback(ISevenZipInArchive inArchive, String extractPath)
        {
            this.inArchive = inArchive;
            if (!extractPath.endsWith("/") && !extractPath.endsWith("\\"))
            {
                extractPath += File.separator;
            }
            this.extractPath = extractPath;
        }

        @Override
        public ISequentialOutStream getStream(final int index, ExtractAskMode extractAskMode) throws SevenZipException
        {
            return new ISequentialOutStream()
            {
                @Override
                public int write(byte[] data) throws SevenZipException
                {
                    String filePath = inArchive.getStringProperty(index, PropID.PATH);
                    FileOutputStream fos = null;
                    try
                    {
                        File path = new File(extractPath + filePath);

                        if (!path.getParentFile().exists())
                        {
                            path.getParentFile().mkdirs();
                        }

                        if (!path.exists())
                        {
                            path.createNewFile();
                        }
                        fos = new FileOutputStream(path, true);
                        fos.write(data);
                    }
                    catch (IOException e)
                    {
                        logger.log(null, "IOException while extracting " + filePath);
                    }
                    finally
                    {
                        try
                        {
                            if (fos != null)
                            {
                                fos.flush();
                                fos.close();
                            }
                        }
                        catch (IOException e)
                        {
                            logger.log(null, "Could not close FileOutputStream", e);
                        }
                    }
                    return data.length;
                }
            };
        }

        @Override
        public void setCompleted(long arg0) throws SevenZipException
        {
        }

        @Override
        public void setTotal(long arg0) throws SevenZipException
        {
        }

        @Override
        public void prepareOperation(ExtractAskMode arg0) throws SevenZipException
        {
        }

        @Override
        public void setOperationResult(ExtractOperationResult arg0) throws SevenZipException
        {
        }
    }
}

 

分享到:
评论
1 楼 记忆无泪 2013-12-04  
Hi,你好。最近在使用Java处理压缩包,如果使用windows的winrar压缩(里面有中文),然后使用sevenzipjbinding在linux上解压会有中文乱码请问如何解决呢?然后使用mac上默认创建的zip包同样里面都是中文,使用sevenzipjbinding在linux上解压也会中文乱码请问如何解决中文乱码的问题呢?

相关推荐

    java加密解密zip压缩包

    楼上兄弟太黑,特意找的源码,2分处理,完美解决Java加密解密zip文件

    Java从压缩包中提取文件

    摘要:Java源码,文件操作,提取文件 Java从压缩包中提取文件,可借机学习一下文件选择按钮事件处理,弹出文件选择器,并判断是否点击了打开按钮,得到选择文件的绝对路径,得到压缩条目的枚举对象,依次枚举条目,设置...

    Java面试文档压缩包

    Java核心知识点总结:这些文档整理了Java编程语言的核心概念和重要知识点,如面向对象编程、异常处理、输入输出、反射等。通过学习这些知识点,您可以加深对Java语言的理解,为面试时的技术问题做好准备。 面试经验...

    Java生成、修改文件夹和文件名.rar

    Java生成、修改文件夹和文件名,Java创建目录或文件夹,并修改、删除、重命名文件夹或文件名称,使用进行的文件操作实例。  super("目录和文件的创建、删除和更名"); //调用父类构造函数  jtfPath=new ...

    java api (中文) 压缩包1

    java的中文api文档,是java编程的一份非常不错的api资料,因为上传大小的限制,我压缩成了两个压缩包,两个下载后,一块解压即可

    Java API中文版压缩包

    Java API是指JDK内部自带的用Java语言书写的类库集合,包括基本数据类型处理,I/O处理,工具函数等等。Java API是以Java包和类的形式组织的,由Oracle官方负责维护,每个不同的Java版本都有自己的API,这个适合你!

    java压缩包解压

    java压缩包解压及中文文件名乱码处理,对应jar包和测试代码

    java处理小程序授权和app微信授权

    java处理小程序授权和app微信授权,以及解析小程序传的encryptedData参数和移动端获取用户信息的处理,压缩包里面包含controller类,解析工具类,配置文件,亲测有效。

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字 Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,...

    java跨域传送文件+zip

    此demo是用于java HttpURLConnection跨域传送图片文件和图片,模拟火狐浏览器,对zip文件进行解压,对图片进行加logo 水印,缩略等处理。其中系统兼容性需要进一步完善,急需要积分,所以先分享了。 ...

    java处理图片大小等比例缩放,自定义修改图片大小,截取,水印

    java 处理图片大小等比例缩放;图片裁剪;支持图片压缩不失真;支持图片添加水印;支持动态图的处理;支持自定义图片大小的转换 等 压缩包中内附使用说明

    Java编写的记事本.rar

    一个文本编辑器程序,用JAVA代码编写实现,貌似在各种编程语言中,初学者都会以记事本为原型,仿写出一些字符编辑文字处理小程序,通过编写这种小程序,可学习到字符的处理技巧,本源码也不例外,因此对于Java初学者...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字 Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,...

    Java处理zip压缩文件

    zip4j实现单个文件或多个文件的压缩、加密压缩、解密压缩包等, 用于实现java处理zip压缩包

    java excel 读取 用 zip 方式。不用第三方包

    /** * 根据 策划的配置表来生成 json * excel 目前使用的版本为2007,其他版本未测试, * excel 格式 定义 ... * 二进制的方式,一般用于 后台管理界面 的文件上传后的处理。 * @author wgq * */

    java源码包---java 源码 大量 实例

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    Java处理Excel文档需要POI依赖jar包

    本压缩包内为,Java处理Excel文档需要POI依赖的完整jar包,包括生成后缀名为xlsx和xls!

    JAVA上百实例源码以及开源项目源代码

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    JAVA上百实例源码以及开源项目

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java源码包4

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

Global site tag (gtag.js) - Google Analytics