zoukankan      html  css  js  c++  java
  • java 文件压缩及解压缩

    java操作windows命令(Rar.exe)执行文件压缩

    // String srcPath = "D:\test";// 被压缩文件夹
    String srcPath = "D:\test.txt";// 被压缩文件
    String destPath = "D:\test.rar";// 压缩后文件
    String rarexePath = "C:\Program Files\WinRAR\Rar.exe"; // 电脑系统中WinRAR安装路径 未安装出错
    String[] rarcmd = { rarexePath, "a", destPath, srcPath };
    Runtime rt = Runtime.getRuntime();
    rt.exec(rarcmd);

    java操作windows命令(UnRAR.exe)执行文件解压缩

    String srcPath = "D:\test.rar";// 压缩文件
    String destPath = "D:\";// 解压缩后路径
    String unrarexePath = "C:\Program Files\WinRAR\UnRAR.exe"; // 电脑系统中WinRAR安装路径 未安装出错
    String[] unrarcmd = { unrarexePath, "x", srcPath, destPath };
    Runtime rt = Runtime.getRuntime();
    rt.exec(unrarcmd);

     java操作第三方jar包执行rar解压缩

    // 引用java-unrar-0.3.jar和commons-logging-1.1.3.jar
    String rarFile = "d:/test.rar";
    String destDir = "d:/";
    
    // 保证文件夹路径最后是"/"或者""
    char lastChar = destDir.charAt(destDir.length() - 1);
    if (lastChar != '/' && lastChar != '\') {
        destDir += File.separator;
    }
    // 根据类型,进行相应的解压缩
    String type = rarFile.substring(rarFile.lastIndexOf(".") + 1);
    if ("rar".equals(type)) {
    
        // 压缩文件
        Archive a = new Archive(new File(rarFile));
        FileOutputStream fos = null;
        FileHeader fh = a.nextFileHeader();
        while (fh != null) {
            if (!fh.isDirectory()) {
                // 1 根据不同的操作系统拿到相应的 destDirName 和 destFileName
                String compressFileName = fh.getFileNameString().trim();
                String destFileName = "";
                String destDirName = "";
                if (File.separator.equals("/")) {
                    // 非windows系统
                    destFileName = destDir + compressFileName.replaceAll("\\", "/");
                    destDirName = destFileName.substring(0, destFileName.lastIndexOf("/"));
                } else {
                    // windows系统
                    destFileName = destDir + compressFileName.replaceAll("/", "\\");
                    destDirName = destFileName.substring(0, destFileName.lastIndexOf("\"));
                }
                // 2 创建文件夹
                File dir = new File(destDirName);
                if (!dir.exists() || !dir.isDirectory()) {
                    dir.mkdirs();
                }
                // 3 解压缩文件
                fos = new FileOutputStream(new File(destFileName));
                a.extractFile(fh, fos);
                fos.close();
                fos = null;
            }
            fh = a.nextFileHeader();
            // 关闭流
        }
        a.close();
        a = null;
    } else {
        throw new Exception("不是rar格式的压缩包!");
    }
  • 相关阅读:
    算法学习——虚树
    【BZOJ】【1385】【Baltic2000】Division expression
    【BZOJ】【3503】【CQOI2014】和谐矩阵
    [杂谈]把大象放进冰箱里!
    【BZOJ】【1923】【Sdoi2010】外星千足虫
    【BZOJ】【1770】【Usaco2009 Nov】lights 灯
    【POJ】【1704】Georgia and Bob
    【BZOJ】【2200】【USACO 2011 Jan】道路和航线
    【BZOJ】【3052】【WC2013】糖果公园
    【BZOJ】【3757】苹果树
  • 原文地址:https://www.cnblogs.com/pumushan/p/5653890.html
Copyright © 2011-2022 走看看