java压缩流的压缩与解压

本教程操作环境:windows7系统、java10版,DELL G3电脑。

1.概念

压缩流可以将输入的数据变为压缩格式后进行输出,或者读取压缩格式的数据后,解压为正常数据。

2.压缩步骤

(1)生成一个压缩类对象,这个对象来自于一个".zip"的文件,通过它产生一ZipOutputStream对象;

(2)生成压缩对象入口,因为需要被压缩的文件不止一个。需要用ZipEntry方法生成压缩入口文件后才能放进压缩文件;

(3)用putNextEntry将压缩入口放入压缩文件;

(4)将文件内容写入了out.write(),将压缩入口和文件流关闭。

3.目录压缩

importjava.io.*;
importjava.util.zip.ZipEntry;
importjava.util.zip.ZipOutputStream;

publicclassZipStreamExam2{
publicstaticvoidmain(String[]args){
try{
Filefile=newFile("d:\\zipmultidir");
ZipOutputStreamzos=newZipOutputStream(newBufferedOutputStream(newFileOutputStream("d:\\zipmultidir.zip")));
zipDir(file,zos,file);
zos.flush();
zos.close();
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}

//压缩一个目录至zip文件
privatestaticvoidzipDir(Filedir,ZipOutputStreamzos,FilerootDir)throwsIOException{
if(!dir.isDirectory())
return;

File[]files=dir.listFiles();
for(inti=0;i<files.length;i++){
if(files[i].isFile()){
System.out.println(files[i].getAbsolutePath());
Stringnow=files[i].getAbsolutePath();
Stringroot=rootDir.getAbsolutePath();
Stringname=now.substring(root.length()+1);
System.out.println(name);

FileInputStreamfis=newFileInputStream(files[i]);

bytebuf[]=newbyte[1024];
intlen=0;
ZipEntryze=newZipEntry(name);
zos.putNextEntry(ze);
while((len=fis.read(buf))!=-1){
zos.write(buf,0,len);
}
fis.close();
}elseif(files[i].isDirectory()){
zipDir(files[i],zos,rootDir);
}
}
}
}

4.解压到目录

importjava.io.*;
importjava.util.zip.ZipEntry;
importjava.util.zip.ZipInputStream;

/**
*Createdbytest2on2016/8/19.
*/
publicclassZipStreamExam3{
publicstaticvoidmain(String[]args){
try{
FilesrcFile=newFile("d:\\zipmultidir.zip");
System.out.println(srcFile.getCanonicalPath());
StringcurDir=srcFile.getParent()+File.separator+"destDir"+File.separator;

ZipInputStreamzipInputStream=newZipInputStream(newBufferedInputStream(newFileInputStream(srcFile)));
ZipEntryze=null;
byte[]buf=newbyte[1024];
intlen=0;
while((ze=zipInputStream.getNextEntry())!=null){
StringfilePath=curDir+ze.getName();
FiledestFile=newFile(filePath);
FiledestDir=newFile(destFile.getParent());
if(!destDir.exists()){
destDir.mkdirs();
}
BufferedOutputStreambufferedOutputStream=newBufferedOutputStream(newFileOutputStream(destFile));
while((len=zipInputStream.read(buf))!=-1){
bufferedOutputStream.write(buf,0,len);
}
bufferedOutputStream.flush();
bufferedOutputStream.close();
}
zipInputStream.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
原文来自:https://www.py.cn
© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容