软件包 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.FilterInputStream
- 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.io.FilterOutputStream
- java.lang.Throwable (implements java.io.Serializable)
- java.lang.Error
- java.lang.VirtualMachineError
- java.lang.InternalError
- java.util.zip.ZipError
- java.lang.InternalError
- java.lang.VirtualMachineError
- java.lang.Exception
- java.util.zip.DataFormatException
- java.io.IOException
- java.util.zip.ZipException
- java.lang.Error
- java.util.zip.ZipEntry (implements java.lang.Cloneable)
- java.util.zip.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 stub
ZipFile 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 block
e.printStackTrace();
} finally{
}
}
private void readZipEntry( ZipFile file, ZipEntry entry) {
// TODO Auto-generated method stub
Scanner in = null;
try {
in = new Scanner(file.getInputStream(entry));
while(in.hasNext()){
info(in.nextLine());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
in.close();
}
}
private void info(String s) {
// TODO Auto-generated method stub
System.out.println(s);
}
}
还有一种读取方法就是使用ZipInputStream对象。
<pre name="code" class="java"> private void readZipFile() {
// TODO Auto-generated method stub
ZipInputStream 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 block
e.printStackTrace();
}
}