zip解析

来源:互联网 发布:无法telnet 端口 编辑:程序博客网 时间:2024/05/16 07:30

软件包 java.util.zip 的分层结构

  • java.lang.Object
    • java.util.zip.Adler32 (implements java.util.zip.Checksum)
    • java.util.zip.CRC32 (implements java.util.zip.Checksum)
    • java.util.zip.Deflater
    • java.util.zip.Inflater
    • java.io.InputStream (implements java.io.Closeable)
      • java.io.FilterInputStream
        • java.util.zip.CheckedInputStream
        • java.util.zip.DeflaterInputStream
        • java.util.zip.InflaterInputStream
          • java.util.zip.GZIPInputStream
          • java.util.zip.ZipInputStream
    • java.io.OutputStream (implements java.io.Closeable, java.io.Flushable)
      • java.io.FilterOutputStream
        • java.util.zip.CheckedOutputStream
        • java.util.zip.DeflaterOutputStream
          • java.util.zip.GZIPOutputStream
          • java.util.zip.ZipOutputStream
        • java.util.zip.InflaterOutputStream
    • java.lang.Throwable (implements java.io.Serializable)
      • java.lang.Error
        • java.lang.VirtualMachineError
          • java.lang.InternalError
            • java.util.zip.ZipError
      • java.lang.Exception
        • java.util.zip.DataFormatException
        • java.io.IOException
          • java.util.zip.ZipException
    • java.util.zip.ZipEntry (implements java.lang.Cloneable)
    • java.util.zip.ZipFile
主要用到了4个类:ZipInputStream  ZipOutputStream   ZipEntry   ZipFile

ZipFile含有 ZipEntry   可以使用 ZipFile.entrys()  ZipFile.getEntry()函数来获得ZipEntry对象。
如果想读取ZipEntry可使用ZipFile.getInputStream()来获得ZipEntry的流对象。
<pre name="code" class="java">package com.lmk.test.ziptest;import java.io.IOException;import java.util.Enumeration;import java.util.Scanner;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;public class ZipTest {public static void main(String[] args){ZipTest test = new ZipTest();test.openZipFile();}private void openZipFile() {// TODO Auto-generated method stubZipFile file = null;try {file = new ZipFile("d:/lmk.zip");info(file.getName());info(file.size()+"");Enumeration<ZipEntry> entrys = (Enumeration<ZipEntry>) file.entries();//for (ZipEntry entry = entrys.nextElement();entrys.hasMoreElements();) {//info(entry.getName());//注意 这里的getName 不识别汉字。//entry = entrys.nextElement();//}ZipEntry entry = null;do{entry = entrys.nextElement();info(entry.getName()+"  "+entry.isDirectory());//注意 这里的getName 不识别汉字。info(entry.getMethod()+"");if(entry.getName().endsWith("txt")){readZipEntry(file,entry);}}while(entrys.hasMoreElements());file.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally{}}private void readZipEntry( ZipFile file, ZipEntry entry) {// TODO Auto-generated method stubScanner in = null;try {in = new Scanner(file.getInputStream(entry));while(in.hasNext()){info(in.nextLine());}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally{in.close();}}private void info(String s) {// TODO Auto-generated method stubSystem.out.println(s);}}

还有一种读取方法就是使用ZipInputStream对象。
<pre name="code" class="java">private void readZipFile() {// TODO Auto-generated method stubZipInputStream in = null;ZipEntry entry = null;int num = 0;try {in =new ZipInputStream(new FileInputStream("d:/lmk.zip"));while((entry = in.getNextEntry())!= null){num++;if (entry.getName().endsWith("txt")){Scanner scan = new Scanner(in);//注意这里直接将ZipInputStream导入while(scan.hasNextLine()){info(scan.nextLine());}}in.closeEntry();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}


0 0
原创粉丝点击