`
逆风的香1314
  • 浏览: 1430140 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

带中文的目录压缩成一个zip文件

阅读更多

由于jdk自带的zip类对中文文件名的支持不好,所以使用了ant的工具类。
网上的大部分都是这样做的,不过不知道为什么,也许是ant版本问题,我用他们的代码依然是中文文件名乱码,经检查发现,需要指定一些输出流的编码方式就可以了。

out.setEncoding("GBK"); // ###### 这句话是关键,指定输出的编码方式


完整的源代码如下
  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.FileOutputStream;
  4. import org.apache.tools.zip.ZipEntry;
  5. import org.apache.tools.zip.ZipOutputStream;
  6. /**
  7.  * 整个目录的压缩成一个zip文件.<br>
  8.  * apache-ant-1.7.1
  9.  * 
  10.  * @author 老紫竹(JAVA世纪网 java2000.net)
  11.  */
  12. public class DirectoryZip {
  13.   public static void jar(String inputFileName, String outputFileName) throws Exception {
  14.     ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outputFileName));
  15.     out.setEncoding("GBK"); // ###### 这句话是关键,指定输出的编码方式
  16.     File f = new File(inputFileName);
  17.     jar(out, f, "");
  18.     out.close();
  19.   }
  20.   private static void jar(ZipOutputStream out, File f, String base) throws Exception {
  21.     if (f.isDirectory()) {
  22.       File[] fl = f.listFiles();
  23.       base = base.length() == 0 ? "" : base + "/"// 注意,这里用左斜杠
  24.       out.putNextEntry(new ZipEntry(base));
  25.       for (int i = 0; i < fl.length; i++) {
  26.         jar(out, fl[i], base + fl[i].getName());
  27.       }
  28.     } else {
  29.       out.putNextEntry(new ZipEntry(base));
  30.       FileInputStream in = new FileInputStream(f);
  31.       byte[] buffer = new byte[1024];
  32.       int n = in.read(buffer);
  33.       while (n != -1) {
  34.         out.write(buffer, 0, n);
  35.         n = in.read(buffer);
  36.       }
  37.       in.close();
  38.     }
  39.   }
  40.   public static void main(String[] args) {
  41.     try {
  42.       jar("D:\\temp""d://test.zip");
  43.     } catch (Exception e) {
  44.       // TODO Auto-generated catch block
  45.       e.printStackTrace();
  46.     }
  47.   }
  48. }

分享到:
评论

相关推荐

    Delphi 压缩解压缩zip文件源代码,支持密码

    1. 可以将任意一个目录压缩成一个zip文件,包含密码 2. 可以将任意一个zip文件,加压到一个目录中,该目录位于当前执行文件所在目录的Unzip目录中,目录结构不变 3. 可以加压出任意一个zip文件中的文件到当前执行...

    开发工具---这里面包含36拉链,768和微缩2003等三个文件,压缩成一个zip

    在描述部分,“开发工具---这里面包含36拉链,768和微缩2003等三个文件,压缩成一个zip”重复了标题的信息,再次强调这个压缩包内有三个主要的文件,分别是36个独立的ZIP文件以及名为“768”和“微缩2003”的两个...

    多文件打压成一个ZIP包

    5. **创建ZIP包**:最后,点击“压缩”或“创建ZIP文件”按钮,软件会处理所选文件并将它们打包成一个ZIP文件。 6. **分享与解压**:完成后,你可以通过电子邮件、云存储服务或物理媒介将ZIP文件发送给他人。接收者...

    C#压缩/解压ZIP文件带密码功能

    - `ZipFile.CreateFromDirectory(string sourceDirectoryName, string destinationArchiveFileName)`: 这个方法用于将指定目录下的所有文件和子目录压缩成一个ZIP文件。 - `ZipFile.AddFile(string fileName, ...

    linux压缩文件命令zip的用法.docx

    zip 命令是 Linux 系统中常用的压缩文件命令,可以将一个或多个文件压缩成一个 zip 文件,以便于文件传输和存储。zip 命令提供了多种选项来控制压缩过程,用户可以根据需要选择合适的选项来实现不同的压缩效果。

    多个excel导出压缩成zip 文件 数据量大导出

    - 将多个Excel文件压缩成一个zip文件可以大大减小存储空间需求,便于传输和分享。 - 使用zip压缩格式,能有效降低文件体积,因为zip支持有损和无损压缩算法,可以根据需要选择合适的压缩级别。 - 在处理大量文件...

    php压缩zip文件

    在PHP开发中,经常需要对文件进行压缩操作,比如将一个或多个文件压缩成一个ZIP文件以供下载或其他处理。本篇将详细介绍如何利用PHP内置的`ZipArchive`类来实现这一功能。 #### 二、`ZipArchive`类简介 `Zip...

    java多文件压缩成zip文件并实现下载

    在Java编程中,将多个文件压缩成一个ZIP文件并实现下载是一个常见的任务,尤其是在处理大量数据或文件分发时。这个过程涉及到Java的I/O流、压缩和HTTP响应的使用。下面将详细介绍如何实现这个功能。 首先,我们需要...

    java 解压缩zip文件

    ZIP文件是一种广泛使用的文件归档格式,它可以将多个文件和目录组合成一个单一的可压缩文件,方便存储和传输。在Java中,我们可以使用`java.util.zip`包中的类来读取和解压ZIP文件。 首先,我们需要了解几个关键的...

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

    - 首先,需要导入`java.util.zip`包中的`ZipOutputStream`和`ZipEntry`类,它们分别用于创建ZIP输出流和表示ZIP包内的每个条目(文件或目录)。 - 使用`File`类遍历指定的目录及其子目录,获取所有需要打包的文件...

    ShpReader压缩文件

    首先,SHP文件的结构是二进制的,由多个部分组成,包括文件头、形状记录头、形状数据和可选的属性数据。文件头包含了文件的基本信息,如文件长度、形状类型等;形状记录头描述了每个形状记录的大小和位置;形状数据...

    C#.net ZIP文件压缩源代码

    这行代码会将指定的sourceDirectory目录及其所有内容压缩成一个ZIP文件。 2. **添加文件到ZIP** 如果需要压缩单个文件,可以使用ZipFile.ExtractToDirectory方法。不过,更灵活的方式是直接使用ZipArchive类。首先...

    一个可以把js源代码压缩成一个ascii字符画的源代码的工具.zip

    压缩包子文件的文件名称列表只有一个,即"一个可以把js源代码压缩成一个ASCII字符画的源代码的工具",这可能包含了工具的源代码、示例、使用说明等相关文件。用户在使用这个工具时,需要阅读相关文档,了解如何操作...

    visual c++将多个文件捆绑成一个exe,双击exe会释放所有文件.相当于vc制作个自解压缩程序.zip

    在IT行业中,有时我们需要将多个文件捆绑到一个可执行文件(EXE)中,以便用户可以轻松地分发和运行整个软件包。Visual C++(VC++)提供了一种方法来实现这一目标,通过创建一个自解压程序,使得用户双击EXE文件时,...

    ZIP压缩和解压类

    4. 创建ZIP容器:最后,所有压缩后的数据块和元数据被组合成一个ZIP容器,并保存为ZIP文件。 三、ZIP解压过程 1. 读取ZIP头:解压程序首先读取ZIP文件的头信息,了解文件的结构。 2. 分析ZIP目录:解析ZIP文件中的...

    将多个PDF文件合并位一个.zip

    然后,将这个合并后的PDF文件进行压缩,打包成ZIP文件。ZIP是一种常见的文件压缩格式,能够减小文件体积,便于存储和传输。 描述中提到的"绿色免安装"意味着我们使用的工具无需正式的安装过程,通常这样的软件是...

    java将文件打包成ZIP压缩文件和解压缩zip文件

    我们先来看看如何将多个文件打包成一个ZIP文件。 1. **打包文件到ZIP** - 首先,创建一个`ZipOutputStream`对象,它需要一个`FileOutputStream`作为参数,指定输出的ZIP文件路径。 - 然后,对于每个要打包的文件...

    python压缩文件夹内所有文件为zip文件的方法

    在日常工作中,经常需要将一个文件夹内的所有文件压缩成一个ZIP文件,以便于传输或存储。Python作为一种强大的编程语言,提供了多种方法来实现这一功能。下面详细介绍如何使用Python内置的`zipfile`模块来压缩指定...

    Java用Zip压缩多个文件实例源码

    通过向这个流写入数据,我们可以将多个文件打包成一个Zip文件。 2. **创建ZipOutputStream对象**: 首先,我们需要创建一个`FileOutputStream`对象,然后使用它来初始化`ZipOutputStream`。例如: ```java ...

    PHP在线解、压缩ZIP文件程序 V1.0

    用户可以上传多个文件,程序会将它们打包成一个ZIP文件。 4. **错误处理**:在处理ZIP文件时,可能出现各种错误,如文件不存在、权限问题等。因此,良好的错误处理机制至关重要。使用`getStatusString()`方法获取...

Global site tag (gtag.js) - Google Analytics