`

java zip 压缩文件以及整个文件夹目录

    博客分类:
  • JAVA
阅读更多
 
    public static final String EXT = ".zip"; 
    private static final String BASE_DIR = ""; 
 
    // 符号"/"用来作为目录标识判断符 
    private static final String PATH = "/"; 
    private static final int BUFFER = 1024; 
    /**
     * 压缩
     * 
     * @param srcPath 需要压缩的文件(目录) 的路径
     * @throws Exception
     */ 
    public static void compress(String srcPath) throws Exception { 
        File srcFile = new File(srcPath); 
 
        compress(srcFile); 
    } 
 
    /**
     * 压缩
     * 
     * @param srcFile 需要压缩的文件(目录) 的路径流
     * @throws Exception
     */ 
    public static void compress(File srcFile) throws Exception { 
        String name = srcFile.getName(); 
        String basePath = srcFile.getParent(); 
        String destPath = basePath +"/"+ name + EXT; 
        compress(srcFile, destPath); 
    } 
 
    /**
     * 压缩
     * 
     * @param srcFile
     *            源路径
     * @param destPath
     *            目标路径
     * @throws Exception
     */ 
    public static void compress(File srcFile, File destFile) throws Exception { 
 
        // 对输出文件做CRC32校验 
        CheckedOutputStream cos = new CheckedOutputStream(new FileOutputStream( 
                destFile), new CRC32()); 
 
        ZipOutputStream zos = new ZipOutputStream(cos); 
 
        compress(srcFile, zos, BASE_DIR); 
 
        zos.flush(); 
        zos.close(); 
    } 
 
    /**
     * 压缩文件
     * 
     * @param srcFile
     * @param destPath
     * @throws Exception
     */ 
    public static void compress(File srcFile, String destPath) throws Exception { 
        compress(srcFile, new File(destPath)); 
    } 
 
    /**
     * 压缩
     * 
     * @param srcFile
     *            源路径
     * @param zos
     *            ZipOutputStream
     * @param basePath
     *            压缩包内相对路径
     * @throws Exception
     */ 
    private static void compress(File srcFile, ZipOutputStream zos, 
            String basePath) throws Exception { 
        if (srcFile.isDirectory()) { 
            compressDir(srcFile, zos, basePath); 
        } else { 
            compressFile(srcFile, zos, basePath); 
        } 
    } 
 

 
    /**
     * 文件压缩
     * 
     * @param srcPath
     *            源文件路径
     * @param destPath
     *            目标文件路径
     * 
     */ 
    public static void compress(String srcPath, String destPath) 
            throws Exception { 
        File srcFile = new File(srcPath); 
 
        compress(srcFile, destPath); 
    } 
 
    /**
     * 压缩目录
     * 
     * @param dir
     * @param zos
     * @param basePath
     * @throws Exception
     */ 
    private static void compressDir(File dir, ZipOutputStream zos, 
            String basePath) throws Exception { 
 
        File[] files = dir.listFiles(); 
 
        // 构建空目录 
        if (files.length < 1) { 
            ZipEntry entry = new ZipEntry(basePath + dir.getName() + PATH); 
 
            zos.putNextEntry(entry); 
            zos.closeEntry(); 
        } 
 
        for (File file : files) { 
 
            // 递归压缩 
            compress(file, zos, basePath + dir.getName() + PATH); 
 
        } 
    } 
 
    /**
     * 文件压缩
     * 
     * @param file
     *            待压缩文件
     * @param zos
     *            ZipOutputStream
     * @param dir
     *            压缩文件中的当前路径
     * @throws Exception
     */ 
    private static void compressFile(File file, ZipOutputStream zos, String dir) 
            throws Exception { 
 
        /**
         * 压缩包内文件名定义
         * 
         * <pre>
         * 如果有多级目录,那么这里就需要给出包含目录的文件名
         * 如果用WinRAR打开压缩包,中文名将显示为乱码
         * </pre>
         */ 
        ZipEntry entry = new ZipEntry(dir + file.getName()); 
 
        zos.putNextEntry(entry); 
 
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream( 
                file)); 
 
        int count; 
        byte data[] = new byte[BUFFER]; 
        while ((count = bis.read(data, 0, BUFFER)) != -1) { 
            zos.write(data, 0, count); 
        } 
        bis.close(); 
 
        zos.closeEntry(); 
    } 

           /**
    * 解压缩功能.
    * 将ZIP_FILENAME文件解压到ZIP_DIR目录下.
    * @throws Exception
    */ 
    public static void upZipFile() throws Exception{ 
    String ZIP_DIR="d:\\";
    String ZIP_FILENAME="D:\\xxx.zip";
        ZipFile zfile=new ZipFile(ZIP_FILENAME); 
        Enumeration zList=zfile.entries(); 
        ZipEntry ze=null; 
        byte[] buf=new byte[1024]; 
        while(zList.hasMoreElements()){ 
            ze=(ZipEntry)zList.nextElement();        
            if(ze.isDirectory()){ 
                File f=new File(ZIP_DIR+ze.getName()); 
                f.mkdir(); 
                continue; 
            } 
            OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(ZIP_DIR, ze.getName()))); 
            InputStream is=new BufferedInputStream(zfile.getInputStream(ze)); 
            int readLen=0; 
            while ((readLen=is.read(buf, 0, 1024))!=-1) { 
                os.write(buf, 0, readLen); 
            } 
            is.close(); 
            os.close();  
        } 
        zfile.close(); 
    } 
    /**
     * 给定根目录,返回一个相对路径所对应的实际文件名.
     * @param baseDir 指定根目录
     * @param absFileName 相对路径名,来自于ZipEntry中的name
     * @return java.io.File 实际的文件
     */ 
     public static File getRealFileName(String baseDir, String absFileName){ 
         String[] dirs=absFileName.split("/"); 
         File ret=new File(baseDir); 
         if(dirs.length>1){ 
             for (int i = 0; i < dirs.length-1;i++) { 
                 ret=new File(ret, dirs[i]); 
             } 
             if(!ret.exists()) 
                 ret.mkdirs(); 
             ret=new File(ret, dirs[dirs.length-1]); 
             return ret; 
         } 
         return ret; 
     } 
分享到:
评论
2 楼 Alex-tao 2013-02-28  
di1984HIT 写道
恩,写的不错。

谢谢!如有考虑不全的地方,请不吝赐教
1 楼 di1984HIT 2013-02-28  
恩,写的不错。

相关推荐

    java压缩文件以及文件夹

    总之,`ZipCompressor.java`是实现文件和文件夹压缩的关键类,它利用了Java标准库提供的`ZipOutputStream`和`ZipEntry`,通过一系列的步骤,将原始文件和目录打包成ZIP格式的压缩文件。熟悉这些概念和API,开发者就...

    Java代码 可以压缩文件夹到指定目录和指定名称,将文件或者文件夹中的文件转成base64格式

    在Java编程语言中,压缩文件夹到指定目录和指定名称是一项常见的任务,这通常涉及到对文件系统的操作和使用压缩库。Java提供了多种方法来实现这一功能,比如使用内置的`java.util.zip`包或者第三方库如Apache ...

    java解压zip压缩文件

    在Java编程环境中,解压ZIP压缩文件是一项常见的任务,它涉及到文件I/O操作以及对ZIP文件格式的理解。本文将深入探讨如何使用Java实现这一功能,同时也会提及`UnZip.java`和`UnZip2.java`这两个文件可能包含的实现...

    Java实现将多目录多层级文件打成ZIP包,以及解压ZIP包

    本文将详细讲解如何使用Java实现将多目录多层级的文件打成ZIP包,以及如何解压这些ZIP包。我们将主要关注`FileUtils.java`这个类,以及依赖的`commons-compress-1.1.jar`库。 `commons-compress-1.1.jar`是Apache ...

    java将文件夹压缩成zip,解压zip压缩包

    本篇文章将详细探讨如何使用Java内置的IO流来实现文件夹的zip压缩以及zip压缩包的解压,无需依赖其他的第三方库如Apache Commons IO或JavaZip。 ### 文件夹压缩成ZIP 首先,我们需要理解如何将一个文件夹及其内容...

    java 操作Zip文件(压缩、解压、加密).zip

    Java操作Zip文件主要涉及到对文件和目录的压缩与解压缩,以及在必要时对压缩文件进行加密处理。这里我们重点讨论使用两个库:`zip4j`和`Apache Ant`来实现这些功能。 1. **zip4j库**:`zip4j-1.3.2.jar`是一个用...

    zip解压缩文件文件夹都可以(java)

    zip解压缩文件文件夹都可以,代码清晰,注释多。非常容易看懂

    java zip文件压缩 可以对目录进行压缩

    使用java的zip压缩库 对文件和文件夹实现压缩

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

    当需要向已存在的ZIP文件追加文件时,首先使用`ZipUtil`解压缩ZIP文件到一个临时目录,然后在该目录中添加新的文件,最后重新压缩整个目录并覆盖原有的ZIP文件。以下是大致的步骤: - 使用`ZipUtil`的`unzip`方法...

    java 打包文件(文件夹)为 zip压缩包 java 压缩文件

    8. **工具类设计**: `ZIPUtil`可能包含静态方法,如`compressFileToZip()`和`compressFolderToZip()`,分别用于压缩单个文件和整个文件夹到zip。这样的设计允许代码重用,同时保持简洁。 9. **标签“源码”**: 指示...

    java压缩文件生成带密码的zip包,解压带密码的zip包的工具类

    * @param zipFile 指定的ZIP压缩文件 * @param dest 解压目录 * @param passwd ZIP文件的密码 * @return 解压后文件数组 * @throws ZipException 压缩文件有损坏或者解压缩失败抛出 */ 方法详细见文件! 一个...

    运用java压缩文件夹并备份至目标文件夹

    在Java中,我们可以使用`ZipOutputStream`类来创建ZIP压缩文件,以及`ZipFile`和`ZipInputStream`来读取和解压ZIP文件。`ZipOutputStream`是一个字节流,用于将数据写入ZIP格式的输出流。我们可以通过创建一个`...

    Java Zip压缩:简化文件和文件夹的压缩操作

    通过以上介绍,我们可以看到Java的`java.util.zip`包提供了强大的工具来处理Zip压缩和解压缩。无论是简单的单文件操作还是复杂的文件夹处理,Java都能轻松应对,为开发者提供了一种高效且灵活的解决方案。

    详解Java无需解压直接读取Zip文件和文件内容

    Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面,我们将详细介绍如何使用Java...

    java实现zip压缩文件

    通过上述代码的详细分析,我们了解了如何使用Java标准库和Apache Commons Compress库来实现文件和文件夹的ZIP压缩。这个例子不仅展示了基本的压缩逻辑,还涉及到了递归处理目录结构的方法。希望本文能帮助开发者更好...

    JAVA实现将文件或文件夹压缩成ZIP格式.rar_84U_BJ5_java程序

    在Java编程语言中,将文件或文件夹压缩成ZIP格式是一项常见的任务,尤其在数据传输、备份或存储优化时。本教程将深入讲解如何使用Java实现这一功能,并提供详细的步骤和代码示例。 首先,我们需要了解ZIP文件格式,...

    JAVA解压ZIP多层目录文件(需ant.jar

    ### JAVA解压ZIP多层目录文件(需ant.jar) #### 概述 本文将详细介绍一个Java方法,该方法用于解压包含多层目录结构的ZIP文件,并能够支持中文文件名。这种方法利用了Apache Ant库中的`org.apache.tools.zip....

    Java实现压缩解压缩文件和文件夹(附源码)

    Java实现压缩解压缩文件和文件夹(附源码) zip unzip 压缩 解压缩

    java 读取ZIP和RAR压缩包的目录结构

    java ZIP和RAR 压缩包 目录结构。 1.ant.jar 解决java自带zip不能读取中文压缩包的问题; 2.需要安装WINRAR软件,以便解压rar文件,然后获取对应目录; 3.实现在线预览压缩包目录结构的功能;

    zip 压缩文件 文件夹,压缩代码

    `addFolderToZip`方法递归地遍历文件夹,对每个文件创建一个`ZipEntry`并写入`zos`,从而将整个文件夹压缩到`zip`文件中。 标签中的“源码”意味着我们关注的是实际的编程实现,而“工具”可能指的是这些功能可以被...

Global site tag (gtag.js) - Google Analytics