`

java zip 中文问题_基于Thinking in java 4th io.ZipCompress_文件名和文件内容

阅读更多
说明:
1、文件内容采用XXXReader、XXXWriter面向字符的处理类
2、由于jdk1.6的ZipOutputStream没有方法setEncoding(encoding),故采用ant.jar的ZipOutputStream.
  ant包,可以在官方网站http://ant.apache.org/bindownload.cgi下载,把ant.jar导入到类中,
我下载的是apache-ant-1.8.2-bin.zip,解压后得到相关jar包 和 关联文档(读文档很必要的哦)

具体见代码:
代码不规范、有点乱,请见谅

package io;
//: io/ZipCompress2.java
// Uses Zip compression to compress any
// number of files given on the command line.
// {Args: ZipCompress2.java}

//import java.util.zip.*;
import org.apache.tools.zip.*; //不使用jdk的rt.jar中的类,转而使用ant.jar中的类。  Apache Ant is a Java library and command-line tool that help building software

import java.util.zip.CheckedInputStream;
import java.util.zip.CheckedOutputStream;
import java.util.zip.Adler32;
import java.util.zip.ZipInputStream;
import java.io.*;
import java.util.*;
import static net.mindview.util.Print.*;

//ant包,可以在官方网站http://ant.apache.org/bindownload.cgi下载,把ant.jar导入到类中
public class ZipCompress2 {
  public static void main(String[] args)
  throws IOException {
 
  //(1)使用org.apache.tools.zip.ZipOutputStream 写压缩包test测试_ant.zip到文件系统
  FileOutputStream f = new FileOutputStream("test测试_ant.zip");
    CheckedOutputStream csum =
      new CheckedOutputStream(f, new Adler32());
     ZipOutputStream zos = new ZipOutputStream(csum); //
     String encoding=System.getProperty("file.encoding");
     zos.setEncoding(encoding);
    
     //BufferedOutputStream out =
      //new BufferedOutputStream(zos);
    PrintWriter out = new PrintWriter(zos);
    zos.setComment("A test of Java Zipping中文注释"); //???怎么解决中文注解显示为乱码的情况????? 采用ant.jar中的压缩相关类
    // No corresponding getComment(), though.
   
    for(String arg : args) {
      print("Writing file " + arg);
      BufferedReader in =new BufferedReader(new FileReader(arg));
      zos.putNextEntry(new ZipEntry(arg));//加入归档包/压缩包的每一个文件,都对应一个ZipEntry。  ???怎么解决文件名为中文显示为乱码的情况????? 采用ant.jar中的压缩相关类
      /* 1.For each file to add to the archive, you must call putNextEntry( ) and pass it a ZipEntry object.
       *
       * The ZipEntry object contains an extensive interface that allows you to get and set all the data
       * available on that particular entry in your Zip file: name, compressed and uncompressed sizes,
       *date, CRC checksum, extra field data, comment, compression method, and whether it’s a directory entry */
      int c;
      while((c = in.read()) != -1)
        out.write(c);//2.BufferedOutputStream out = new BufferedOutputStream(zos);
      /*通过out将数据输出/写入到zos,但是每一个文件对应一个in=new BufferedReader(new FileReader(arg)),
       *每一个文件对应一个ZipEntry:zos.putNextEntry(new ZipEntry(arg))*/
      in.close();
      out.flush();
    }
    out.close();
   
        //(2)
    /*由于在java.util.zip.ZipOutputStream中对ZipEntry.name采用的是utf-8编码: byte[] nameBytes = getUTF8Bytes(e.name)
     *    java.util.zip.ZipInputStream中也是对ZipEntry.name采用的是utf-8编码:ZipEntry e = createZipEntry(getUTF8String(b, 0, len))
       所以在读取zip包中的文件时,可以兼容(都是用utf-8编码文件名)
      
       但是在ant.jar的org.apache.tools.zip.* 中没有ZipInputStream类,这是就只能使用org.apache.tools.zip.ZipFile了.
      
      当使用java.util.zip.ZipInputStream时报错:
       at java.util.zip.ZipInputStream.getUTF8String(ZipInputStream.java:303)
    这是因为org.apache.tools.zip.ZipOutputStream使用GB18030编码文件名,却在java.util.zip.ZipInputStream中使用utf-8解码文件名
     */
   
    /*
    // Checksum valid only after the file has been closed!
    print("Checksum: " + csum.getChecksum().getValue()); //In order to read the checksum, you must somehow have access to the associated Checksum(表示数据校验和的接口) object
    // Now extract the files:
    print("Reading file");
    FileInputStream fi = new FileInputStream("test测试_ant.zip");
    CheckedInputStream csumi =
      new CheckedInputStream(fi, new Adler32());
    ZipInputStream zis = new ZipInputStream(csumi);
    //BufferedInputStream bis = new BufferedInputStream(zis); 
    BufferedReader bis=new BufferedReader( new InputStreamReader(zis));
    java.util.zip.ZipEntry ze;
   
    while((ze = zis.getNextEntry()) != null) {
      print("Reading file " + ze);
      int x;
      while((x = bis.read()) != -1)
        System.out.print((char)x); //System.out.write()是面向字节的
      print();
    }
    if(args.length == 1)
       print("Checksum: " + csumi.getChecksum().getValue());
    bis.close();
    print();
    */
   
    //(3)采用org.apache.tools.zip.ZipFile读取zip文件
    org.apache.tools.zip.ZipFile zf=new org.apache.tools.zip.ZipFile("test测试_ant.zip",encoding);
    Enumeration<org.apache.tools.zip.ZipEntry>  e_zEntries=zf.getEntries();
    while(e_zEntries.hasMoreElements()){
    org.apache.tools.zip.ZipEntry ze=e_zEntries.nextElement();
    print("File: " + ze);
    BufferedReader bf=new BufferedReader( new InputStreamReader(zf.getInputStream(ze)) );
    int x;
      while((x = bf.read()) != -1)
        System.out.print((char)x); //System.out.write()是面向字节的
      print();
    }
  }
} /* (Execute to see output) *///:~
分享到:
评论

相关推荐

    IBM WAS8.5配置WS_SDK_JAVA_TECH_7.0.6.1__TRIAL

    它是IBM提供的一个工具集,专门用于创建、部署和管理基于Java的Web服务。这个SDK包含了JAX-WS(Java API for XML Web Services)和JAXB(Java Architecture for XML Binding),这两个是构建和消费Web服务的核心API...

    thinking_in_java-master.zip_Thinking in Java_zip

    `thinking_in_java-master.zip`这个压缩文件很可能是该书的源代码或者配套练习代码的集合,方便读者实践和探索书中所讲解的内容。 在深入探讨《Thinking in Java》中的知识点之前,我们先了解一下Java语言的基础。...

    javadb-10_5_3_0.zip_javadb_10_5_3_0.m

    JavaDB,全称为Apache Derby...综上所述,"javadb-10_5_3_0.zip_javadb_10_5_3_0.m"文件提供了学习和使用JavaDB数据库的全套资源,无论是初次接触数据库的新手,还是寻求轻量级数据库解决方案的开发者,都能从中受益。

    JAVA FileOperate.zip_java_java zip_zip

    在Java中,我们可以使用内置的`java.io`和`java.util.zip`包来实现对文件的创建、读取、写入和压缩解压等操作。下面将详细讨论这些知识点。 1. **文件操作**: - **创建文件**:使用`java.io.File`类可以创建新的...

    Java_chatsrc_GUI.zip_GUI_Java_chatsrc_GUI.zip_java gui_java聊天软件_

    这个压缩文件`Java_chatsrc_GUI.zip`包含了用于开发Java聊天软件的源代码和相关资源。文件名中的"chatsrc"暗示了这是聊天应用的源代码,而"GUI"则表明该应用使用了图形用户界面。通过解压这个文件,开发者可以查看和...

    zip4j--Java操作zip压缩文件接口

    Java操作zip压缩格式的开源项目,功能强大而且使用方便,能完全满足Java操作Zip压缩文件,官方网址为:http://www.lingala.net/zip4j/ 可以下载到jar包、源码和示例,好像没有提供API文档。 不过需要使用代理访问...

    SE_JAVA_EXP_E046.zip

    IO流是处理输入和输出的重要工具,Java提供了丰富的类和接口来处理文件读写、网络通信等。学生可能需要了解流的分类(如字节流和字符流)、缓冲区的使用,以及如何进行文件复制或数据传输。 此外,还可能涉及反射、...

    SOM_Java_v.0.1.zip_SOM_Java_v.0.1_java s_som java_som java code_

    标题中的"SOM_Java_v.0.1.zip"是一个压缩包文件,其中包含了与Java相关的 SOM(可能是"System Object Model"或"Self-Organizing Maps"的缩写)的源代码,版本为0.1。这个项目可能是一个用于构建应用程序的框架或者库...

    基于Java开源内容管理系统项目源码.zip

    基于Java开源内容管理系统项目源码.zip基于Java开源内容管理系统项目源码.zip基于Java开源内容管理系统项目源码.zip基于Java开源内容管理系统项目源码.zip基于Java开源内容管理系统项目源码.zip基于Java开源内容管理...

    java JDK_API_1_6_zh_CN.zip java中文版jdk

    这个CHM(Compiled Help Manual)文件是一种常见的帮助文档格式,用户可以通过它来快速查询和学习Java API的相关内容。 Java API中文版为开发者提供了以下关键知识点: 1. **基础类库**:包括核心类如Object、...

    Java_zip.rar_java zip_unzip_zip

    Java的zip和unzip操作是程序开发中常见的文件处理任务,尤其在数据传输、备份或者归档场景下显得尤为重要。本教程将详细讲解如何在Java中进行ZIP文件的压缩与解压缩。 首先,我们来看`Zipper.java`和`Unzip.java`这...

    ORKUT_USING_JAVA.zip_orkut_orkut in java_orkut java

    "orkut_in_java"和"orkut_java"暗示项目内容可能涵盖以下几点: 1. **Java Web开发**:可能使用Java Servlets和JSP(Java Server Pages)进行后端开发,处理HTTP请求并生成动态网页。 2. **MVC(Model-View-...

    _art___art__https___dataxujing.github.io_jy_book__jy_book.zip

    然而,上述内容均基于对文件名和部分网址的直接解读,实际的文件内容、用途以及与艺术的关系等具体信息还需要打开压缩包文件进行详细检查。压缩包内的文件类型、结构、内容,以及是否有图片、文档或代码等,都将为...

    19.java基础概念-注释.zip

    19.java基础概念_注释.zip19.java基础概念_注释.zip19.java基础概念_注释.zip19.java基础概念_注释.zip19.java基础概念_注释.zip19.java基础概念_注释.zip19.java基础概念_注释.zip19.java基础概念_注释.zip19.java...

    20.java基础概念-关键词.zip

    20.java基础概念_关键词.zip20.java基础概念_关键词.zip20.java基础概念_关键词.zip20.java基础概念_关键词.zip20.java基础概念_关键词.zip20.java基础概念_关键词.zip20.java基础概念_关键词.zip20.java基础概念_...

    java_ee_sdk-8u1.zip

    4. **库文件**:包含Java EE 8实现所需的JAR文件,这些文件在开发和运行Java EE应用时会被引用。 5. **许可证和安装指南**:提供关于软件的使用权限和安装步骤的信息。 通过学习和使用"java_ee_sdk-8u1.zip"中的...

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

    通过上述步骤,可以实现基于Java向ZIP压缩包追加文件的功能,虽然这个过程涉及解压和再压缩,但它是最常见的解决方案,因为Java的标准库不直接支持追加操作。在实际应用中,可以根据具体需求进行优化和调整,以满足...

    java压缩zip文件解决中文乱码问题

    在Java编程中,处理文件压缩和解压是常见的任务,特别是使用ZIP格式。然而,当涉及到包含中文字符的文件或目录时,可能会遇到乱码问题。这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在...

    基于Java的开源内容管理系统.zip

    基于Java的开源内容管理系统.zip基于Java的开源内容管理系统.zip基于Java的开源内容管理系统.zip基于Java的开源内容管理系统.zip基于Java的开源内容管理系统.zip基于Java的开源内容管理系统.zip基于Java的开源内容...

    j2ee-java-游戏论坛管理.zip

    j2ee_java_游戏论坛管理.zipj2ee_java_游戏论坛管理.zip j2ee_java_游戏论坛管理.zipj2ee_java_游戏论坛管理.zip j2ee_java_游戏论坛管理.zipj2ee_java_游戏论坛管理.zip j2ee_java_游戏论坛管理.zipj2ee_java_游戏...

Global site tag (gtag.js) - Google Analytics