`

文件压缩整理 File-ZIP

    博客分类:
  • JAVA
 
阅读更多

示例代码:

 

String zipFilePath = filePath+".zip";   //压缩文件 在原文件名的基础上,追加 。zip
ZipUtil.compress(filePath,zipFilePath);	//压缩文件

  

 

/** 
  * @Description:  
  *     压缩和解压工具 
 */  
public class ZipUtil {  
 
   public static void compress(String srcFilePath, String destFilePath) { 
        File srcFile = new File(srcFilePath); 
        if (!srcFile.exists()) { 
            throw new RuntimeException(srcFilePath + "不存在"); 
        } 
        if(!srcFile.isFile()){
           throw new RuntimeException(srcFilePath + "不是文件"); 
        }
        File zipFile = new File(srcFilePath+".zip"); 
        FileOutputStream fos = null;
        CheckedOutputStream cos = null;
        ZipOutputStream zos = null;
        try { 
            fos = new FileOutputStream(zipFile); 
            cos = new CheckedOutputStream(fos, new CRC32()); 
            zos = new ZipOutputStream(cos); 
//            zos.setEncoding("GBK");  //设置字符集

            zos.setMethod(ZipOutputStream.DEFLATED);  // 启用压缩  
            zos.setLevel(Deflater.BEST_COMPRESSION);   // 设置压缩级别为最强压缩  
            String baseDir = ""; 
            compressFile(srcFile, zos, baseDir); 
            zos.close(); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } finally{
           IOUtils.closeQuietly(fos);
           IOUtils.closeQuietly(cos);
           IOUtils.closeQuietly(zos);
        }
    } 
   /** 
     * 压缩文件
     *  
     */ 
   /**
    * 压缩文件
    * @param file    待压缩文件
    * @param zos     压缩流
    * @param baseDir  文件标记
    */
    private static void compressFile(File file, ZipOutputStream zos, String baseDir) { 
        BufferedInputStream bis = null;
        FileInputStream fis = null;
        try { 
           fis = new FileInputStream(file);
            bis = new BufferedInputStream(fis); 
            ZipEntry entry = new ZipEntry(baseDir + file.getName()); 
            zos.putNextEntry(entry); 
            int count; 
            byte[] buf = new byte[1024]; 
            while ((count = bis.read(buf)) != -1) { 
                zos.write(buf, 0, count); 
            } 
            zos.flush();   // 注,在使用缓冲流写压缩文件时,一个条件完后一定要刷新,不然可能有的内容就会存入到后面条目中去了  
            zos.closeEntry();  // 关闭当前ZIP条目并定位流以写入下一个条目  
        } catch (Exception e) { 
           e.printStackTrace();
        } finally{
           IOUtils.closeQuietly(fis);
           IOUtils.closeQuietly(bis);
        }
    } 

    /** 
      * @Description:  
      *     解压文件 
      * @param zipPath 被压缩文件,请使用绝对路径 
      * @param //targetPath 解压路径,解压后的文件将会放入此目录中,请使用绝对路径
      *         默认为压缩文件的路径的父目录为解压路径 
      * @param //encoding 解压编码
     */  
    public static void decompress(String zipPath) throws FileNotFoundException, ZipException, IOException {  
        // 获取解缩文件  
        File file = new File(zipPath);  
        if (!file.isFile()) {  
            throw new FileNotFoundException("要解压的文件不存在");  
        }  
        String targetPath = file.getParent();  
//        ZipFile zipFile = new ZipFile(file, "GBK");   // 实例化ZipFile对象  GBK
//        Enumeration<ZipEntry> files = zipFile.getEntries();  // 获取ZipFile中的条目

        ZipFile zipFile = new ZipFile(file, Charset.forName("GBK"));   // 实例化ZipFile对象  GBK
        Enumeration<? extends ZipEntry> files = zipFile.entries();  // 获取ZipFile中的条目

        ZipEntry entry = null;  // 迭代中的每一个条目  
        File outFile = null;  // 解压后的文件  
        BufferedInputStream bin = null;   // 读取压缩文件的输入流  
        BufferedOutputStream bout = null;  // 写入解压后文件的输出流  
        while (files.hasMoreElements()) {  
            entry = files.nextElement();  // 获取解压条目  
            // 实例化解压后文件对象  
            outFile = new File(targetPath + File.separator + entry.getName());  
            // 如果条目为目录,则跳向下一个  
            if (entry.getName().endsWith(File.separator)) {  
                outFile.mkdirs();  
                continue;  
            }  
            if (!outFile.getParentFile().exists()) { // 创建目录   
                outFile.getParentFile().mkdirs();  
            }  
            outFile.createNewFile();   // 创建新文件  
            if (!outFile.canWrite()) {   // 如果不可写,则跳向下一个条目  
                continue;  
            }  
            try {  
                // 获取读取条目的输入流  
                bin = new BufferedInputStream(zipFile.getInputStream(entry));  
                // 获取解压后文件的输出流  
                bout = new BufferedOutputStream(new FileOutputStream(outFile));  
                // 读取条目,并写入解压后文件  
                byte[] buffer = new byte[1024];  
                int readCount = -1;  
                while ((readCount = bin.read(buffer)) != -1) {  
                    bout.write(buffer, 0, readCount);  
                }  
            } finally {  
               IOUtils.closeQuietly(bin);
               IOUtils.closeQuietly(bout);
            }  
        }  
        zipFile.close();  //这个需要关闭不然删除不了
    }  
    
    /** 
     * @Description:  
     *     解压文件 
//     * @param zipPath 被压缩文件,请使用绝对路径
//     * @param targetPath 解压路径,解压后的文件将会放入此目录中,请使用绝对路径
     *         默认为压缩文件的路径的父目录为解压路径 
//     * @param encoding 解压编码
    */  
      
//    public static void main(String[] args) throws Exception{
//     String file = "C:\\FakePath\\412901197810083510_20180909_p2p_m.xml";
//     ZipUtil.compress(file,file+".zip");
//     ZipUtil.decompress(file+".zip");
//    }
    
}  

 

分享到:
评论

相关推荐

    7-Zip批量压缩

    总的来说,7-Zip的批量压缩功能既适合个人用户快速处理日常任务,也适用于开发者或系统管理员进行大规模的数据整理和备份。其强大的定制性和灵活性,使其成为Windows平台上不可多得的压缩工具。通过熟练掌握这些操作...

    File-backup.zip_4 3 2 1_dotoi3_文件列表

    ZIP是一种常见的文件压缩格式,它支持多文件打包,且具有较高的压缩比,广泛应用于数据归档和分发。 总的来说,理解和掌握这些文件管理的知识点对于任何IT从业者都非常重要,它们不仅提高了工作效率,还能确保数据...

    zip文件压缩解压库文件(整理过的)

    "zip文件压缩解压库文件(整理过的)"是一个专门为处理zip文件而设计的程序库,基于zlib-1.2.5版本的源代码进行优化和整理,适用于Visual Studio(VS)环境。 **zlib** 是一个开源的压缩库,由Jean-loup Gailly和...

    PyPI 官网下载 | pulp_file-client-1.2.0.dev1596541272.tar.gz

    4. 文件压缩与解压:集成常见的压缩格式,如`.zip`、`.tar.gz`,实现文件的压缩和解压缩。 5. 文件元数据处理:获取或修改文件的元数据,如权限、创建时间、修改时间等。 6. 错误处理:良好的异常处理机制,确保在...

    Sort_file.zip

    ZIP是一种常见的文件压缩格式,支持多文件和目录的压缩。它允许用户在压缩包内保留文件的原始属性,包括时间戳,这使得解压后的文件能够保持原有的排序。 8. 解压与恢复: 当用户解压"Sort_file.zip"时,为了保持...

    Java带密码压缩zip与解压文件源码Java实用源码整理learns

    本篇文章将深入探讨如何使用Java实现带密码的ZIP文件压缩和解压缩功能,结合给定的文件名列表,我们将讲解核心概念、源码分析以及实际应用。 首先,我们需要了解Java中的`java.util.zip`包,它提供了对ZIP和GZIP...

    FileManager.zip

    像"FileManager.zip"这样的压缩包使用了zip格式,这是一种广泛支持的文件压缩标准。解压缩工具有很多,如WinRAR、7-Zip和系统自带的解压工具。压缩文件可以减少存储需求,但解压缩时需要消耗计算资源。 归档和备份...

    RS文件管理器v1.8.4.3 高级RS File Manager.txt打包整理.zip

    不仅能浏览ZIP和RAR压缩文件,还能进行解压和创建压缩文件,无需额外安装解压软件,简化了文件处理流程。 4. **网络文件访问**: 支持FTP、SFTP、WebDAV等网络协议,用户可以直接通过RS文件管理器连接到远程...

    Java带密码压缩zip与解压文件源码Java实用源码整理

    在Java编程语言中,处理文件压缩和解压缩是常见的任务,特别是在数据传输、备份或存储时。本篇文章将深入探讨如何使用Java实现带密码保护的ZIP文件的压缩和解压缩功能,这对于保护敏感数据至关重要。 首先,Java...

    ZipBuilder - A zip package creation utility for collections of large files

    这可能意味着在实际使用中,用户会看到类似"file1.zip", "folder1.zip", "large_file1.zip"等具体文件名,这些是ZipBuilder处理后的压缩结果。 总结起来,ZipBuilder是一款专为大文件集合设计的压缩工具,它具备...

    C#文件提取专家文件整理

    总的来说,"C#文件提取专家文件整理"意味着开发一个工具或功能,它能高效地从ZIP文件中提取文件,并进行后续的整理工作,如归档、重命名或移动文件。这个过程需要对C#的文件I/O和压缩库有深入的理解,同时也要考虑...

    一款精美图片在线压缩网站html源码源码资源下载整理.zip

    【标题】:“一款精美图片在线压缩网站html源码源码资源下载整理.zip”是指一个包含HTML源代码的压缩包,这个源码用于构建一个在线图片压缩网站。网站设计精美,功能实用,允许用户上传图片并进行压缩处理,优化图片...

    File-kedua

    总之,"File-kedua"代表了IT工作中常见的文件管理和数据传输活动,涉及到的技能和工具包括文件压缩、解压、文件命名规范、文件内容处理等。了解并熟练掌握这些技能,能有效提高个人在IT领域的专业素养。

    Java压缩解压zip技术_动力节点Java学院整理

    在Java中,我们可以使用内置的`java.util.zip`包来实现ZIP文件的压缩和解压缩功能。本教程将深入讲解如何使用Java进行ZIP文件操作。 首先,我们需要了解`ZipOutputStream`和`ZipInputStream`这两个类。`...

    File Manager Pro+ 文件管理器+ v3.1.7高级版.zip

    还有可能包含ZIP和RAR文件的支持,包括创建、解压和管理这些压缩文件的能力。 在v3.1.7这个版本中,开发者可能针对之前版本的反馈进行了改进,修复了一些可能导致应用崩溃或者用户体验不佳的bug,同时可能引入了新...

    python办公自动化源码集锦-自动解压压缩文件

    首先,我们需要引入Python的`zipfile`库来处理.zip格式的压缩文件和`tarfile`库来处理.tar或.tar.gz格式的压缩文件。这两个库都是Python标准库的一部分,无需额外安装即可使用。 1. **处理.zip文件** - `zipfile`...

    convfile.zip_zip

    综合以上信息,我们可以推断这个压缩包"convfile.zip_zip"可能是一个包含文本对齐数据的压缩文件,可能用于编码、生物信息学分析、数据整理或其他需要特定文本格式的应用场景。然而,要深入理解文件的具体内容和用途...

    S.E文件管理器 Solid Explorer File Manager 2.8.13 中文多语免费版.zip

    – 支持读取并解压ZIP,7ZIP,RAR和TAR文件,支持加密压缩文件 – 能够创建受密码保护的ZIP和7ZIP文件 – 云服务管理器,支持: Dropbox, Box, OneDrive, Google Drive, Sugarsync, Copy, Mediafire, Owncloud, ...

    打包解包工具.zip

    在命令行环境中,可以结合使用tar和压缩工具,例如"tar -czvf archive.tar.gz file1 file2",将多个文件打包并压缩为.tar.gz格式。 3. 解压工具:对应于每种压缩格式,都有相应的解压工具。例如,WinRAR和7-Zip不仅...

    android打包zip

    总结来说,"android打包zip"涉及到在Android开发中使用Java或Groovy进行ZIP文件的创建,这通常用于整理和分发资源或库文件。JAR文件是Java类库的容器,它们也可以被包含在ZIP文件中,便于管理和使用。了解并熟练掌握...

Global site tag (gtag.js) - Google Analytics