精华内容
下载资源
问答
  • java解压压缩包
    2021-11-03 09:16:45

    1.maven引用

    <dependency>
       <groupId>net.lingala.zip4j</groupId>
       <artifactId>zip4j</artifactId>
       <version>2.9.0</version>
    </dependency>
    
    <dependency>
       <groupId>net.sf.sevenzipjbinding</groupId>
       <artifactId>sevenzipjbinding</artifactId>
       <version>16.02-2.01</version>
    </dependency>
    <dependency>
       <groupId>net.sf.sevenzipjbinding</groupId>
       <artifactId>sevenzipjbinding-all-platforms</artifactId>
       <version>16.02-2.01</version>
    </dependency>
    
    <dependency>
       <groupId>org.tukaani</groupId>
       <artifactId>xz</artifactId>
       <version>1.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-compress</artifactId>
        <version>1.21</version>
    </dependency>
    更多相关内容
  • java解压压缩包

    2021-08-03 16:33:05
    java解压压缩包

    java解压压缩包

    在开发过程中,我们会遇到解压压缩包的情况。
    废话少说,上代码:
    首先是如何解压zip格式的压缩包文件:

    /**
         * zip文件解压
         * @param destPath 解压文件路径
         * @param zipFile  压缩文件
         //* @param password 解压密码(如果有)
         */
    
        public static void unPackZip(File zipFile,String destPath) {
    
            try {
                ZipFile zip = new ZipFile(zipFile);
    
                /*zip4j默认用GBK编码去解压,这里设置编码为GBK的*/
                zip.setFileNameCharset("GBK");
                zip.extractAll(destPath);
    
                // 如果解压需要密码
    //            if (zip.isEncrypted()) {
    //                zip.setPassword(password);
    //            }
            } catch (Exception e) {
            }
        }
    
    

    那么rar格式的如何解压呢,代码如下:

    /**
         * rar文件解压(不支持有密码的压缩包)
         *
         * @param rarFile  rar压缩包
         * @param destPath 解压保存路径
         */
    
        public static void unPackRar(File rarFile, String destPath) {
            try (Archive archive = new Archive(rarFile)) {
                if (null != archive) {
                    FileHeader fileHeader = archive.nextFileHeader();
                    File file = null;
                    while (null != fileHeader) {
                        // 防止文件名中文乱码问题的处理
                        String fileName = fileHeader.getFileNameW().isEmpty() ? fileHeader.getFileNameString() : fileHeader.getFileNameW();
                        if (fileHeader.isDirectory()) {
                            //是文件夹
                            file = new File(destPath + File.separator + fileName);
                            file.mkdirs();
                        } else {
                            //不是文件夹
                            file = new File(destPath + File.separator + fileName.trim());
                            if (!file.exists()) {
                                if (!file.getParentFile().exists()) {
                                    // 相对路径可能多级,可能需要创建父目录.
                                    file.getParentFile().mkdirs();
                                }
                                file.createNewFile();
                            }
    
                            FileOutputStream os = new FileOutputStream(file);
                            archive.extractFile(fileHeader, os);
                            os.close();
                        }
    
                        fileHeader = archive.nextFileHeader();
                    }
                }
            } catch (Exception e) {
            }
        }
    

    小伙伴们可以在前面进行压缩包格式的判断,运用不同的解压方法。
    获取压缩包后缀名的方法如下:

    //获得文件名称
            String fileName = file.getOriginalFilename();
    
            //获得文件后缀名
            String type = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
    
    展开全文
  • Java解压压缩包(zip/rar/7z)

    千次阅读 2021-09-18 09:58:22
    主要实现解压压缩包,拿到压缩包中每个文件。 二、思路 针对压缩包的操作,首先需要拿到压缩包文件的流,然后利用第三方工具将流实例化,调用next方法迭代,然后分别操作压缩包中的单个文件。 三、代码实现 1.zip...

    一、概述

    主要实现解压压缩包,拿到压缩包中每个文件。

    二、思路

    针对压缩包的操作,首先需要拿到压缩包文件的流,然后利用第三方工具将流实例化,调用next方法迭代,然后分别操作压缩包中的单个文件。

    三、代码实现

    1.zip实现

    jdk支持对zip流的操作,相关依赖在java.util.zip下

    // 获取本地zip包
    public void unzipByPath() {
        try {
            String localPath = "D:\\文件.zip";
            File file = new File(localPath);
            ZipInputStream zin; // 创建ZipInputStream对象
            InputStream inputStream = new FileInputStream(file);
            zin = new ZipInputStream(inputStream, Charset.forName("GBK")); // 实例化对象,指明要解压的文件
            ZipEntry entry;
            while ((entry = zin.getNextEntry()) != null) {
                System.out.println(zipEntry.getName());
                BufferedInputStream bs = new BufferedInputStream(zin);
                // 将文件信息写到byte数组中
                byte[] bytes = new byte[(int) entry.getSize()];
                bs.read(bytes, 0, (int) entry.getSize());
                if ("zip".equals(entry.getName().substring(entry.getName().lastIndexOf(".") + 1))) {
        			ZipInputStream secondZip = new ZipInputStream(new ByteArrayInputStream(bytes), Charset.forName("GBK"));
       				// 循环解压
    			}
            }
            zin.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    // 获取远程zip包
    public void unzipByUrl() {
        String fileUrl = "https://localhost:80/group1/M00/6D/A3/wKjScWE7PxqAQfUnAAGcIyZy0ZU422.zip";
        try {
            URL url = new URL(fileUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            int resultCode = conn.getResponseCode();
            if (200 == resultCode) {
                ZipInputStream zipInputStream = new ZipInputStream(conn.getInputStream(), Charset.forName("GBK"));
                ZipEntry zipEntry;
                while ((zipEntry = zipInputStream.getNextEntry()) != null) {
                    System.out.println(zipEntry.getName());
                    BufferedInputStream bs = new BufferedInputStream(zipInputStream);
                	// 将文件信息写到byte数组中
                    byte[] bytes = new byte[(int) zipEntry.getSize()];
                    bs.read(bytes, 0, (int) zipEntry.getSize());
                    if ("zip".equals(zipEntry.getName().substring(zipEntry.getName().lastIndexOf(".") + 1))) {
                        ZipInputStream secondZip = new ZipInputStream(new ByteArrayInputStream(bytes), Charset.forName("GBK"));
                        // 循环解压
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

    2.rar实现

    1)依赖

    <!-- 解压rar所需的依赖 -->
    <dependency>
        <groupId>com.github.junrar</groupId>
        <artifactId>junrar</artifactId>
        <version>4.0.0</version>
    </dependency>
    

    2)代码

    // 获取本地rar
    public void unRarByPath() {
        String rarPath = "D:\\文件.rar";
        try {
            File outFileDir = new File(rarPath);
            Archive archive = new Archive(new FileInputStream(rarFile));
            FileHeader fileHeader;
             while ((fileHeader = archive.nextFileHeader()) != null) {
             	// 解决文件名中文乱码问题
                 String fileName = fileHeader.getFileNameW().isEmpty() ? fileHeader.getFileNameString() :
                         fileHeader.getFileNameW();
                 String fileExt =
                         fileName.substring(fileName.lastIndexOf(FileConstant.FILE_SEPARATOR) + 1);
                 System.out.println(fileName);
                 ByteArrayOutputStream os = new ByteArrayOutputStream();
                 archive.extractFile(fileHeader, os);
                // 将文件信息写到byte数组中
                 byte[] bytes = os.toByteArray();
                 System.out.println(bytes.length);
                 if ("rar".equals(fileExt)) {
                     Archive secondArchive = new Archive(new ByteArrayInputStream(bytes));
                     // 循环解压
                 }
             }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    // 获取远程rar
    public void unRarByUrl() {
        String rarUrl = "https://localhost:80/group1/M00/6D/A3/wKjScWE7PxqAQfUnAAGcIyZy0ZU422.rar";
        try {
            URL url = new URL(rarUrl);
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            int resultCode = conn.getResponseCode();
            if (200 == resultCode) {
                InputStream inputStream = conn.getInputStream();
                Archive archive = new Archive(inputStream);
                FileHeader fileHeader;
                while ((fileHeader = archive.nextFileHeader()) != null) {
                	// 解决文件名中文乱码问题
                    String fileName = fileHeader.getFileNameW().isEmpty() ? fileHeader.getFileNameString() :
                            fileHeader.getFileNameW();
                    String fileExt =
                            fileName.substring(fileName.lastIndexOf(FileConstant.FILE_SEPARATOR) + 1);
                    System.out.println(fileName);
                    ByteArrayOutputStream os = new ByteArrayOutputStream();
                    archive.extractFile(fileHeader, os);
                	// 将文件信息写到byte数组中
                    byte[] bytes = os.toByteArray();
                    System.out.println(bytes.length);
                    if ("rar".equals(fileExt)) {
                        Archive secondArchive = new Archive(new ByteArrayInputStream(bytes));
                        // 循环解压
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

    3)注意
    rar5的加密算法未开源,目前不支持对rar5的解压,建议压缩时选择rar4
    在这里插入图片描述

    3.7z实现

    由于7z的算法等原因,目前只有针对文件的解压,不能直接对流进行操作

    <!--apache提供的压缩包依赖-->
    <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-compress</artifactId>
       <version>1.9</version>
    </dependency>
    <!--不引入xz依赖会在new SevenZFile的时候报错java.lang.NoClassDefFoundError: org/tukaani/xz/FilterOptions-->
    <dependency>
        <groupId>org.tukaani</groupId>
        <artifactId>xz</artifactId>
        <version>1.5</version>
    </dependency>
    
    // 解析本地7z文件
    public void un7zByPath() {
        File srcFile = new File("C:\\文件.7z");//获取当前压缩文件
        //开始解压
        try {
            SevenZFile zIn = new SevenZFile(srcFile);
            SevenZArchiveEntry entry = null;
            File newFile = null;
            while ((entry = zIn.getNextEntry()) != null) {
                if (!entry.isDirectory()) {
                    newFile = new File("destDirPath", entry.getName());
                    if (!newFile.exists()) {
                        new File(newFile.getParent()).mkdirs();//创建此文件的上级目录
                    }
                    OutputStream out = new FileOutputStream(newFile);
                    BufferedOutputStream bos = new BufferedOutputStream(out);
                    int len = -1;
                	// 将文件信息写到byte数组中
                    byte[] buf = new byte[(int) entry.getSize()];
                    while ((len = zIn.read(buf)) != -1) {
                        bos.write(buf, 0, len);
                    }
                    System.out.println(entry.getName() + "=" + Arrays.toString(buf));
                    // 关流顺序,先打开的后关闭
                    bos.close();
                    out.close();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

    实在不行可以考虑把远程文件写到磁盘再读成文件,不过这种方法不太靠谱,暂不考虑

    四、总结

    有关rar5不能解析,以及7z不能直接对流进行操作,后面找到解决方法再写

    展开全文
  • java压缩包解压

    2018-06-25 11:21:48
    java压缩包解压及中文文件名乱码处理,对应jar包和测试代码
  • java 中压缩ZIP格式源码,仅供参考。
  • Java解压RAR文件,压缩包内包含源码、Jar包、依赖包和示例程序,也可以从http://code.google.com/p/java-unrar/downloads/list这里下载支持密码的unrar项目(包括源码和jar包),其依赖包也很容易搜到。 RAR 密码
  • Java中递归逻辑循环调用解压zip里面所有的压缩包 Java中递归逻辑循环调用解压zip里面所有的压缩包
  • java实现解压压缩包的jar包和源码,主要针对格式有7z,rar,zip,附带一个日志打印以及其他的几个文件操作的小功能。路径配置在FileHelper.java类的main函数中,可以封装到配置文件中去。
  • 实现JAVA解压缩带密码的RAR压缩包,支持中文,支持Window、Linux平台
  • java实现压缩包(zip,rar)解压缩

    千次阅读 2022-02-11 09:42:28
    java实现压缩包(zip,rar)解压缩
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-compress</artifactId>
        <version>1.12</version>
    </dependency>
     
    <dependency>
        <groupId>com.github.junrar</groupId>
        <artifactId>junrar</artifactId>
        <version>3.0.0</version>
    </dependency>
    import java.io.*;
    import java.util.Enumeration;
    
    import com.github.junrar.rarfile.FileHeader;
    import com.github.junrar.Archive;
    import org.apache.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipFile;
    import pie.engine.server.tools.utils.SnowIdUtils;
    
    /**
     * 解压文件工具类
     *
     * @author zhangyongbo
     */
    public class UnZipAnRarUtil {
        private static final int buffer = 2048;
    
        /**
         * 解压Zip文件
         *
         * @param file 文件目录
         */
        public static File unZip(File file) {
            int count;
            InputStream is = null;
            FileOutputStream fos = null;
            BufferedOutputStream bos = null;
            String savepath = "src/main/temporary/";
            savepath += SnowIdUtils.uniqueLongHex() + "/";
            new File(savepath).mkdir(); //创建保存目录
            ZipFile zipFile = null;
            try {
                zipFile = new ZipFile(file, "gbk"); //解决中文乱码问题
                Enumeration<?> entries = zipFile.getEntries();
                while (entries.hasMoreElements()) {
                    byte[] buf = new byte[buffer];
                    ZipEntry entry = (ZipEntry) entries.nextElement();
                    String filename = entry.getName();
                    boolean ismkdir = filename.lastIndexOf("/") != -1;
                    //检查此文件是否带有文件夹
                    filename = savepath + filename;
                    if (entry.isDirectory()) { //如果是文件夹先创建
                        file = new File(filename);
                        file.mkdirs();
                        continue;
                    }
                    file = new File(filename);
                    if (!file.exists()) { //如果是目录先创建
                        if (ismkdir) {
                            new File(filename.substring(0, filename.lastIndexOf("/"))).mkdirs(); //目录先创建
                        }
                    }
                    file.createNewFile(); //创建文件
                    is = zipFile.getInputStream(entry);
                    fos = new FileOutputStream(file);
                    bos = new BufferedOutputStream(fos, buffer);
                    while ((count = is.read(buf)) > -1) {
                        bos.write(buf, 0, count);
                    }
                    bos.flush();
                    bos.close();
                    fos.close();
                    is.close();
                    break;
                }
                zipFile.close();
                return file;
            } catch (IOException ioe) {
                ioe.printStackTrace();
                return file;
            } finally {
                try {
                    if (bos != null) {
                        bos.close();
                    }
                    if (fos != null) {
                        fos.close();
                    }
                    if (is != null) {
                        is.close();
                    }
                    if (zipFile != null) {
                        zipFile.close();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
    
        /**
         * 解压Rar文件
         *
         * @param file 文件目录
         */
        public static File unRar(File rarFile) throws Exception {
            String outDir = "src/main/temporary/" + SnowIdUtils.uniqueLongHex() + "/";
            File outFileDir = new File(outDir);
            if (!outFileDir.exists()) {
                boolean isMakDir = outFileDir.mkdirs();
                if (isMakDir) {
                    System.out.println("创建压缩目录成功");
                }
            }
            System.out.println(rarFile.getName());
            Archive archive = new Archive(new FileInputStream(rarFile));
            FileHeader fileHeader = archive.nextFileHeader();
            File out = null;
            while (fileHeader != null) {
                if (fileHeader.isDirectory()) {
                    fileHeader = archive.nextFileHeader();
                    continue;
                }
                out = new File(outDir + fileHeader.getFileNameString());
                if (!out.exists()) {
                    if (!out.getParentFile().exists()) {
                        out.getParentFile().mkdirs();
                    }
                    out.createNewFile();
                }
                FileOutputStream os = new FileOutputStream(out);
                archive.extractFile(fileHeader, os);
    
                os.close();
                break;
            }
            archive.close();
            return out;
        }
    
    
    }

    展开全文
  • public static void zipToFile(String sourceFile, String toFolder) throws Exception { String toDisk = toFolder;// 接收解压后的存放路径 ZipFile zfile = new ZipFile(sourceFile);// 连接待...
  • JAVA解压压缩包后的中文乱码问题

    千次阅读 2018-04-17 16:38:31
    java代码对于zip压缩包解压、压缩等等操作,建议使用zip4j。相关的文章有很多,不再赘述。此处只讨论解压缩之后可能出现的中文乱码问题。 问题代码: public static void unZip( String zipPath, String ...
  • java解压加密压缩包

    2021-02-19 13:20:45
    https://blog.csdn.net/qq_38723394/article/details/80853154
  • Java实现Zip压缩包解压

    万次阅读 多人点赞 2019-06-17 19:32:34
    对zip压缩包解压是比较常见的应用场景,java代码的实现也很简单。废话不多说,直接上代码吧 一、代码 /** * zip解压 * @param srcFile zip源文件 * @param destDirPath 解压后的目标文件夹 * @throws ...
  • "zip".equals(extension)){ throw new BusinessException(ErrorEnum.ERROR_PARAM,"请上传zip压缩包"); } Map> maps = new HashMap(); for(Map obj : casesMaps){ maps.put(obj.get("code").toString(),obj); } try {...
  • 下面小编就为大家带来一篇java调用7zip解压压缩包的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 对于这个功能,如果频繁的解压压缩包,在性能上多少有些损耗,且解压文件,会产生大量中间文件,不适合后续管理。特别是现在都是基于容器化部署,如果文件操作处理不当,导致删除失败,将很快打满容器磁盘容量,引起...
  • 使用Java远程上传压缩包到服务器,或者在服务器上拉去压缩包或者文件,在服务器上创建目录。
  • Apache的java压缩(解压)文件jar包; jar包的名字有些别扭叫ant.jar
  • Java压缩包中提取文件源码整理
  • Java提取压缩包中的文件,文件操作的范畴,操作对象为ZIP格式的压缩文件,将从ZIP中提取出BMP图像文件,要将从压缩包中提取文件,必须先解压压缩包,然后将指定文件拷贝出来,代码中先实现了对zip文件的解压,然后...
  • java实现的解压与压缩的类 其中有zip和rar类型的 还包括了所需的架包
  • Java解压带密码的RAR文件

    热门讨论 2012-07-07 15:56:54
    Java解压RAR文件,压缩包内包含源码、Jar包、依赖包和示例程序,也可以从http://code.google.com/p/java-unrar/downloads/list这里下载支持密码的unrar项目(包括源码和jar包),其依赖包也很容易搜到。
  • Java解压较大压缩包 注意引入的类,这里用到了apache的ant依赖 <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.9.7</...
  • 前面,笔者讲到。如何把文件打包为zip包,那么反过来怎么把zip文件包解压为...而解压缩只需要解压一级,压缩包里面的压缩文件则不必理会。直接上代码喽:/*** 解压文件* @param zipPath 要解压的目标文件* @param...
  • public static void main(String[] args) { System.out.println(readZipFileName("D:/123.zip")); } //读取zip文件内的文件,返回文件名称列表 public static List<Map<String, Object>...
  • java 文件解压到指定目录是和压缩文件相反的操作,直接上测试代码: 1、工具类代码: /** * 解压文件到指定目录 */ @SuppressWarnings("rawtypes") public static String unZipFilesTest(File zipFile) ...
  • java自带了java.util.zip工具可以实现在不解压zip压缩包的情况下读取包内文件的文件名:(注:只能是ZIP格式的,rar我试了不行)代码如下: public static String readZipFile(String path, String str) throws ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 84,015
精华内容 33,606
关键字:

java解压压缩包