`
zapldy
  • 浏览: 85035 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Java解压缩Zip文件(支持中文)

阅读更多

      最近有个项目需要用Java做解压缩Zip文件,由于JDK自带的zip相关的类都不支持以中文命名的文件,所以在网上搜索了些资料,自己花了点时间研究了下。希望和大家分享下,有不足的地方还多多指教。

 

      废话不多说,直接看代码吧!(记住:在classpath里面一定要引入ant.jar这个jar包。)

 

package org.zapldy.io;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;

public abstract class ZipUtils {

 public static void zip(String source, String dest) throws IOException {
  OutputStream os = new FileOutputStream(dest);
  BufferedOutputStream bos = new BufferedOutputStream(os);
  ZipOutputStream zos = new ZipOutputStream(bos);    
  
  //支持中文,但有缺陷!这是硬编码!
  zos.setEncoding("GBK");  
  
  File file = new File(source);

  String basePath = null;
  if (file.isDirectory()) {
   basePath = file.getPath();
  } else {
   basePath = file.getParent();
  }

  zipFile(file, basePath, zos);

  zos.closeEntry();
  zos.close();
 }

 public static void unzip(String zipFile, String dest) throws IOException {
  ZipFile zip = new ZipFile(zipFile);
  Enumeration<ZipEntry> en = zip.getEntries();
  ZipEntry entry = null;
  byte[] buffer = new byte[1024];
  int length = -1;
  InputStream input = null;
  BufferedOutputStream bos = null;
  File file = null;

  while (en.hasMoreElements()) {
   entry = (ZipEntry) en.nextElement();
   if (entry.isDirectory()) {
    file = new File(dest, entry.getName());
    if (!file.exists()) {
     file.mkdir();
    }
    continue;
   }

   input = zip.getInputStream(entry);
   file = new File(dest, entry.getName());
   if (!file.getParentFile().exists()) {
    file.getParentFile().mkdirs();
   }
   bos = new BufferedOutputStream(new FileOutputStream(file));

   while (true) {
    length = input.read(buffer);
    if (length == -1)
     break;
    bos.write(buffer, 0, length);
   }
   bos.close();
   input.close();
  }
  zip.close();
 }

 private static void zipFile(File source, String basePath, ZipOutputStream zos) throws IOException {
  File[] files = new File[0];

  if (source.isDirectory()) {
   files = source.listFiles();
  } else {
   files = new File[1];
   files[0] = source;
  }

  String pathName;
  byte[] buf = new byte[1024];
  int length = 0;
  for (File file : files) {
   if (file.isDirectory()) {
    pathName = file.getPath().substring(basePath.length() + 1) + "/";
    zos.putNextEntry(new ZipEntry(pathName));
    zipFile(file, basePath, zos);
   } else {
    pathName = file.getPath().substring(basePath.length() + 1);
    InputStream is = new FileInputStream(file);
    BufferedInputStream bis = new BufferedInputStream(is);
    zos.putNextEntry(new ZipEntry(pathName));
    while ((length = bis.read(buf)) > 0) {
     zos.write(buf, 0, length);
    }
    is.close();
   }
  }
 }
}

 

3
2
分享到:
评论
6 楼 cnlinkin 2009-09-05  
5 楼 zapldy 2009-06-29  
经过重新的修改,确实能支持中文,但代码不够灵活!
4 楼 zapldy 2009-06-29  
包名可以使中文的,包里面的文件名字都是乱码!待解决中。。。。。。也请高手解决!
3 楼 Redhead 2009-06-25  
中文的文件名,无论是压缩还是解压,都是乱码,我用的是1.7.1的ant
2 楼 wangdi 2009-05-25  
请使用ant的。。。api。。。呃。。。 
不用这么复杂的。
1 楼 wangdi 2009-05-25  
请使用ant。。。。。。。

相关推荐

    java 解压缩zip文件

    在Java编程语言中,解压缩ZIP文件是一项常见的任务,特别是在处理数据传输、文件打包和部署等场景下。本文将深入探讨如何使用Java API来解压缩ZIP文件,包括基本概念、核心类库以及具体实现步骤。 ZIP文件是一种...

    JAVA文件压缩与解压缩实践,java解压缩zip文件,Java源码.zip

    在Java编程语言中,文件的压缩与解压缩是常见的操作,尤其在数据传输、存储优化以及备份场景下显得尤为重要。...通过上述知识点,开发者能够有效地在Java环境中进行ZIP文件的压缩与解压缩操作,满足实际项目需求。

    JAVA解压ZIP格式的压缩包_java解压缩_zip_

    `ZipInputStream`是用于读取ZIP文件的输入流,而`ZipEntry`代表ZIP文件中的一个条目,即一个单独的压缩文件。 解压ZIP文件的基本步骤如下: 1. 创建一个`FileInputStream`对象,指向ZIP文件路径。 2. 使用`...

    JAVA解压缩ZIP或RAR格式的文件

    以下是解压缩ZIP文件的基本步骤: 1. 创建一个`FileInputStream`对象,指向ZIP文件。 2. 使用`FileInputStream`创建`ZipInputStream`对象。 3. 通过`ZipInputStream`的`getNextEntry()`方法遍历ZIP文件中的每个条目...

    java解压缩ZIP文件

    ### Java解压缩ZIP文件:深度解析与实践 #### 核心知识点概览: - **Java I/O与网络数据流统一接口**:Java的1.1版本提供了统一的接口来处理I/O数据流与网络数据流,这使得数据的压缩、传输和解压缩变得简单而高效...

    JAVA解压缩ZIP压缩文件(含中文名文件)完整DEMO

    本篇文章将详细讲解如何使用Java来解压缩ZIP格式的压缩文件,特别是那些包含中文文件名的压缩包。我们将探讨相关API的使用,以及解决中文文件名在解压过程中可能出现的问题。 1. **Java的压缩与解压缩库**: Java...

    java android zip解压缩(解决压缩中文乱码问题)

    本篇文章将深入探讨如何在Android平台上解决Java ZIP库在解压缩中文文件时出现的乱码问题。 首先,我们要明白乱码问题的根源。在文件的压缩和解压缩过程中,文件名通常被编码为字节序列,这个序列取决于原始文件名...

    使用java解压缩zip文件

    本篇文章将深入探讨如何使用Java API来实现ZIP文件的解压缩,并提供详细的注释帮助理解代码逻辑。 首先,我们需要了解Java中的`java.util.zip`包,这个包提供了处理压缩文件格式(如ZIP和GZIP)所需的所有类。其中...

    Java解压缩ZIP文件同时包含Jar包解决ZIP包中含有中文名称信息的文件

    博文链接:https://peng-jian-ming.iteye.com/blog/190572

    java解压缩zip代码与用到的jar包

    本主题将深入讲解如何使用Java来解压缩ZIP文件,并介绍相关库和具体实现方法。 标题提到的"java解压缩zip代码与用到的jar包"主要涉及了Java对ZIP文件的操作,以及一个名为`ant.jar`的第三方库。`ant.jar`是Apache ...

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

    - **解压缩任务**:使用`unzip`任务可以解压缩Zip文件到指定的目标目录。 - **Ant脚本**:Ant通过XML格式的构建文件来定义任务,这使得整个过程可配置且易于自动化。 在实际应用中,如果你的项目依赖于这两个库,...

    java解压缩zip文件

    zip格式是一种免费的压缩文件格式,我们可以通过java类库编写函数来解压缩它,实现winwar这类软件的功能。

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

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

    JAVA文件压缩与解压缩实践(源代码).zip

    JAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩...

    java 中 zip压缩文件解压工具类

    至于标签“文件解压缩”,它涵盖了我们在讨论中的主题——如何在Java中处理ZIP文件的解压缩。Java提供了强大且易于使用的API,使得开发者能够轻松地集成文件解压缩功能到他们的应用程序中。 总的来说,Java的`java....

    JAVA文件压缩与解压缩实践(源代码+论文)

    在Java编程语言中,文件的压缩与解压缩是常见的数据处理操作,特别是在数据传输、存储优化和备份场景中。本实践项目围绕这个主题展开,包括源代码和相关的论文,为学习者提供了深入理解和应用Java压缩库的机会。以下...

    java ZIP 解压缩

    java语言操作解压缩文件。 /** * 数据压缩 * * @param data * @return * @throws Exception */ public static byte[] compress(byte[] data) throws Exception { ByteArrayInputStream bais = new ...

Global site tag (gtag.js) - Google Analytics