`
libin0019
  • 浏览: 238204 次
  • 性别: 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 11 压缩包版 -jdk11.0.12

    这个"Java 11 压缩包版 - jdk11.0.12"包含了Java Development Kit的最新稳定版本,允许开发者在Windows操作系统上搭建Java开发环境。下面将详细介绍如何安装、配置以及使用Java 11,同时也会涉及一些相关的重要知识...

    java1.8压缩包--java源码

    Java 1.8源码压缩包是一个非常重要的学习资源,它包含了Java开发工具集(JDK)和Java运行环境(JRE)的核心组件。对于Java开发者来说,理解源码可以帮助他们深入理解语言的工作原理,提高编程技能,并解决实际开发中...

    基于Java向zip压缩包追加文件

    在Java编程中,向现有的ZIP压缩包追加文件通常需要经过解压、修改、再压缩的步骤,因为标准的Java ZIP库(如`java.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...

    java 读写压缩包

    在Java编程中,读写压缩包是常见的任务,特别是在处理大量数据或文件打包与传输时。这个示例可能展示了如何使用Java内置的`java.util.zip`包来创建、读取和修改ZIP压缩文件。以下是对这个主题的详细阐述: ### 1. ...

    Java从压缩包中提取文件Demo源码.zip

    在Java编程语言中,处理压缩文件,如ZIP格式,是一项常见的任务。本示例源码提供了从ZIP压缩包中提取文件的方法,这对于软件开发、数据传输以及文件打包解包非常实用。下面我们将深入探讨Java中如何操作ZIP文件,并...

    Java从压缩包中提取文件.rar

    总的来说,"Java从压缩包中提取文件.rar"这个资源为Java开发者提供了一个学习和参考的实例,涵盖了Swing GUI的创建以及使用Java处理压缩文件的方法,特别是从RAR文件中提取内容。无论是初学者还是有经验的开发者,都...

    java 压缩包

    Java 压缩包是一个包含了Java开发环境的压缩文件,主要包含Java Development Kit(JDK)的版本1.5。JDK是Oracle公司提供的用于Java应用程序开发和部署的基础工具集,它为程序员提供了编写、编译、调试以及运行Java...

    java加密解密zip压缩包

    在Java编程环境中,创建一个能够加密和解密ZIP压缩包的项目是一项常见的需求,尤其是在处理敏感数据时。本文将深入探讨如何使用Java实现这一功能,同时也会提及与ActionScript 3(AS3)进行加密解密的相关知识。 ...

    Java学习适用课件。压缩包

    这份"Java学习适用课件"压缩包提供了丰富的学习资源,旨在帮助初学者和有经验的开发者深入理解和掌握Java的核心概念和技术。 首先,让我们从基础开始。Java的基础包括语法结构、变量、数据类型、运算符和控制流程。...

    JDK 8 压缩包文件 免费分享

    在这个免费分享的JDK 8压缩包文件中,你可以找到所有必要的组件来搭建和运行Java应用程序。 首先,JDK 8的核心特性之一是Lambda表达式。这是一种函数式编程的概念,允许将函数作为一个对象进行传递,简化了多线程...

    Java maven压缩包

    Java Maven压缩包是一个包含了Apache Maven 3.8.4版本的软件包,Maven是Java开发中的一个项目管理和综合工具。它主要负责构建、依赖管理和项目信息管理,极大地简化了Java项目的构建过程。Maven使用一种标准的项目...

    使用Java向服务器上传文件压缩包并实现解压缩

    Java的标准库`java.util.zip`提供了`ZipInputStream`和`ZipEntry`类来处理ZIP格式的压缩包。通过SFTP连接到服务器,下载压缩包到本地,然后使用这些类进行解压缩: ```java // 下载压缩包到本地 sftpChannel.get(...

    JAVA类小游戏集合压缩包

    这个名为"JAVA类小游戏集合压缩包"的资源包含了四个使用Java编写的经典小游戏:五子棋、数独、俄罗斯方块和雷霆战机。下面我们将深入探讨这些游戏的实现原理以及Java在游戏开发中的应用。 首先,`FiveChess.java`是...

    java生成压缩包

    在Java编程语言中,生成压缩包是一项常见的任务,特别是在处理大量数据或文件打包发送时。本文将深入探讨如何使用Java来创建和管理压缩文件,主要参考了CSDN上的一篇博客文章“java生成压缩包”。 首先,Java标准库...

    Java zip压缩包查看程序源码

    在Java中,处理zip压缩包是一项常见的任务,例如读取、创建、修改或提取压缩包内的文件。本源码提供了一个Java程序,用于查看zip压缩包的内容,这对于理解和学习如何在Java中操作zip文件非常有帮助。 在Java中,`...

    java源码:Java zip压缩包查看程序源码.rar

    8. 源码学习价值:作为“经典”标签的源码,它可能是Java社区中流传的成熟代码示例,有助于初学者理解如何在实际项目中使用Java处理ZIP文件。通过阅读和分析这些源码,开发者可以加深对`java.util.zip`包的理解,...

    Java zip压缩包查看程序源码.rar

    `Java zip压缩包查看程序源码.rar`是一个包含Swing图形界面应用程序和相关工具类的资源包,它允许开发者查看和操作ZIP压缩文件。这个工具包简化了与ZIP文件交互的过程,减少了开发者的编码工作量。 首先,Swing是...

    Java从压缩包中提取文件

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

    Java带密码解压缩RAR压缩包(内附代码)

    在Java编程环境中,处理RAR压缩包并对其进行解压是一个常见的任务,特别是在自动化脚本或数据迁移等场景下。本文将详细介绍如何使用Java实现这个功能,特别是处理带密码保护的RAR文件,同时支持中文文件名,并能在...

Global site tag (gtag.js) - Google Analytics