当我们需要传输的文件过大时,就可以先将文件压缩再传输。
解压缩流:输入流,读取压缩包中的文件
压缩包中的每个文件都是一个zipEntry对象,解压本质就是把每一个zipEntry对象按照层级拷贝到本地另一个文件夹中
以下是解压的过程:
File src =new File("D:\\aaa.zip");//创建一个文件表示要解压的压缩包
FIle dest =new FIle("D:\\");
ZipInputStream zis =new ZipInputStream(new FileInputStream(src));
//创建一个解压缩流
zipEntry entry;
while((entry=zis.getentry)!=null)
{
//获取zipEntry对象,会把压缩包里面所有文件,文件夹获取,读取完返回null;
if(entry.isDirectory()){
FIle file =new File(dest,entry.toString())
file.mkdirs();
}else{
FileOutputStream fos=new FileOutputStream(new File(dest,entry.toString()));
int b;
while((b=zis.read())!=-1){
fos.wrte(b);
}
fos.close();
zis.closeEntry()://表示在压缩包中的一个文件处理完毕了
}
}
zis.close();//关流
压缩:把每一个文件|文件夹看成zipEntry对象放入压缩包中
public static void main(String[] args) throws IOException {
File src=new File("D:\\aaa");//创建要压缩的文件
File dest=new File(src.getParentFile(),src.getName() +".zip");//创建要压缩包的位置
ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(dest));
toZip(src,zos,src.getName());
zos.close();//关闭流
}
public static void toZip(File src,ZipOutputStream zos,String name) throws IOException {
File[] files = src.listFiles();
for (File file : files) {
if (file.isFile()) {//创建enTry对象并写入
ZipEntry entry = new ZipEntry(name+"\\"+file.getName());
zos.putNextEntry(entry);
FileInputStream fis =new FileInputStream(file);
int b;
while((b=fis.read())!=-1){
zos.write(b);
}
fis.close();
zos.closeEntry();
}
else{
toZip(file,zos,name+"\\"+file.getName());
}
}
}
}