300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > java zip 读取_java读取zip (含压缩包内的文件)

java zip 读取_java读取zip (含压缩包内的文件)

时间:2019-02-17 03:10:11

相关推荐

java zip 读取_java读取zip (含压缩包内的文件)

ZIP是一种相当简单的分别压缩每个文件的存档格式。java中使用ZipFile、ZipInputStream快速读取或解压zip压缩包中的目录和文件。

完整示例:packagecom.weizhixi;

mons.io.IOUtils;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.IOException;

importjava.io.InputStream;

importjava.nio.charset.Charset;

importjava.util.List;

importjava.util.zip.ZipEntry;

importjava.util.zip.ZipFile;

importjava.util.zip.ZipInputStream;

/**

*java读取zipdemo

*/

publicclassTest{

publicstaticvoidmain(String[]a)throwsException{

Filefile=newFile("C:\\Users\\XQ\\Desktop\\1.zip");

ZipFilezipFile=null;

ZipInputStreamzin=null;

FileInputStreamfis=null;

try{

Charsetgbk=Charset.forName("GBK");

zipFile=newZipFile(file,gbk);

fis=newFileInputStream(file);

zin=newZipInputStream(fis,gbk);

ZipEntryze=null;

while((ze=zin.getNextEntry())!=null){

Stringpath=ze.getName();

System.out.println(path);

if(!ze.isDirectory()&&ze.toString().endsWith("txt")){

InputStreaminputStream=zipFile.getInputStream(ze);

Listtexts=IOUtils.readLines(inputStream);

for(Stringtext:texts){

System.out.println(""+text);

}

inputStream.close();

}

}

}catch(IOExceptione){

e.printStackTrace();

}finally{

try{

if(zin!=null){

zin.closeEntry();

zin.close();

}

if(fis!=null)

fis.close();

if(zipFile!=null)

zipFile.close();

}catch(IOExceptione){

e.printStackTrace();

}

}

}

}

测试:

测试zip压缩包如下图:

运行代码:测试/

测试/java/

测试/java/demo.txt

line1

line2

测试/php/

常见异常:

1、读取压缩包内文件的文件流时候,报空指针异常(即如无法获取demo.txt文件流)Exceptioninthread"main"java.lang.NullPointerException

atjava.io.Reader.(Reader.java:78)

atjava.io.InputStreamReader.(InputStreamReader.java:113)

mons.io.IOUtils.readLines(IOUtils.java:986)

mons.io.IOUtils.readLines(IOUtils.java:968)

atcom.weizhixi.Test.main(Test.java:37)

atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)

atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

atjava.lang.reflect.Method.invoke(Method.java:498)

atcom.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

这种错误是经常是由于编码问题导致。zipFile.getInputStream(ze)

zipFile 和 ze 都需要同样编码,如GBKCharsetgbk=Charset.forName("GBK");

zipFile=newZipFile(file,gbk);

zin=newZipInputStream(fis,gbk);

2、使用完后记得关闭相关流。否则文件可能被占用。尤其zipFile.getInputStream(ze)

使用的工具类

我使用IOUtils读取文件,可按需要自定义。

maven:

commons-io

commons-io

2.4

原创文章,转载请注明出处:/article/93.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。