(JAVA)-IO-压缩流

2023-12-13 23:40:48

当我们需要传输的文件过大时,就可以先将文件压缩再传输。

解压缩流:输入流,读取压缩包中的文件

压缩包中的每个文件都是一个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());
            }
        }
    }
}

文章来源:https://blog.csdn.net/fdvvg/article/details/134906195
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。