原来在jdk6中读写zip会有中文乱码问题。但是在jdk7之后,读写zip可以设置charset编码了。
ZipFile和ZipOutputStream都多了个含有charset参数的构造函数。
以下是写一个zip文件的例子
package com.memorycat.learn.learnjdk.java.util.zip; import java.io.FileOutputStream; import java.nio.charset.Charset; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * @author MemoryCat.com * @version 2016年3月8日 */ public class MyZipOutputStream { public static void main(String[] args) throws Exception { ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream("c:/3.zip"),Charset.forName("GBK")); zipOutputStream.setLevel(9);//压缩级别 zipOutputStream.setComment("这是备注,该zip文件由MemoryCat生成!"); zipOutputStream.putNextEntry(new ZipEntry("根目录文件")); zipOutputStream.write("我是根目录文件的内容".getBytes("GBK")); zipOutputStream.closeEntry(); zipOutputStream.putNextEntry(new ZipEntry("根目录文件2")); zipOutputStream.write("我是根目录文件的内容2".getBytes("GBK")); zipOutputStream.closeEntry(); zipOutputStream.putNextEntry(new ZipEntry("根目录文件/a.txt")); zipOutputStream.write("aaaaa2".getBytes("GBK")); zipOutputStream.closeEntry(); zipOutputStream.putNextEntry(new ZipEntry("a/b/c/d/e.txt")); zipOutputStream.write("eeeeeeeeeeeeee".getBytes("GBK")); zipOutputStream.closeEntry(); zipOutputStream.putNextEntry(new ZipEntry("a/b/w/saf.txt")); zipOutputStream.write("aaabsad".getBytes("GBK")); zipOutputStream.closeEntry(); zipOutputStream.close(); System.out.println("end"); } }
以下是一个读zip文件的例子
package com.memorycat.learn.learnjdk.java.util.zip; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.Charset; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; /** * @author MemoryCat.com * @version 2016年3月7日 */ public class MyZipFile { public static void main(String[] args) throws IOException { // SortedMap<String, Charset> availableCharsets = Charset.availableCharsets(); // for (Entry<String, Charset> e : availableCharsets.entrySet()) { // System.out.println(e.getKey() + "->" + e.getValue()); // } // System.out.println("-----------------"); ZipFile zipFile = new ZipFile("c:/3.zip", Charset.forName("GBK")); System.out.println(zipFile); System.out.println(zipFile.getName()); System.out.println(zipFile.size()); Enumeration<? extends ZipEntry> entries = zipFile.entries(); while (entries.hasMoreElements()) { ZipEntry e = entries.nextElement(); System.out.println(e); //读取e.txt的内容 if(e.getName().endsWith("e.txt")){ InputStream inputStream = zipFile.getInputStream(e); BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream)); System.out.println("\te.txt----->"+reader.readLine()); reader.close(); } } } }
读取输出结果
java.util.zip.ZipFile@bda96b c:\3.zip 5 根目录文件 根目录文件2 根目录文件/a.txt a/b/c/d/e.txt e.txt----->eeeeeeeeeeeeee a/b/w/saf.txt