Java-压缩流

在Java中,可以使用压缩流来对数据进行压缩和解压缩操作。常见的压缩流包括ZIPOutputStream、ZIPInputStream等。这些流允许你在读写数据时对其进行压缩和解压缩,以节省存储空间或网络带宽。

package IoStream.zip;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class ZipStreamdemo1
{
    public static void main(String[] args) throws IOException
    {
        File originalfile = new File(".\\srcc.zip");
        File targetfile = new File(".\\");
        unzipfile(originalfile,targetfile);
    }
    public static void unzipfile(File originalfile,File targetfile) throws IOException
    {
        ZipInputStream zis = new ZipInputStream(new FileInputStream(originalfile));

        ZipEntry entry;//压缩包中的每个文件或文件夹都是zipentry对象
        while ((entry = zis.getNextEntry()) != null){
            System.out.println(entry);
            if (entry.isDirectory()){
                //文件夹处理
                File file = new File(targetfile,entry.toString());
                file.mkdirs();
            }
            else
            {
                //文件处理
                FileOutputStream fos = new FileOutputStream(new File(targetfile,entry.toString()));
                int b;
                while ((b = zis.read()) != -1){
                    fos.write(b);
                }
                fos.close();
                zis.closeEntry();
            }

        }
        zis.close();
    }

}

  • 压缩流
    * 需求
    * 把a.txt打包成一个压缩包
package IoStream.zip;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class zipdemo2
{
    public static void main(String[] args) throws IOException
    {
        /*
        * 压缩流
        *       需求
        *       把a.txt打包成一个压缩包
        * */
        //1,创建File对象表示要压缩的文件
        File file = new File(".\\a.txt");
        //2,创建File对象表示压缩包的位置
        File file1 = new File(".\\");
        toZip(file,file1);
    }

    private static void toZip(File file, File file1) throws IOException
    {
        //1,创建压缩流关联压缩包
        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(file1,"a.zip")));
        //2,创建ZipEntry对象,表示压缩包里面的每一个文件和文件夹
        ZipEntry entry = new ZipEntry(file.getName());
        //3,把ZipEntry对象放到压缩包当中
        zos.putNextEntry(entry);
        //4,把file中的文件数据写入压缩包当中
        FileInputStream fis = new FileInputStream(file);
        int b;
        while ((b = fis.read()) != -1){
            zos.write(b);
        }
        zos.closeEntry();
        zos.close();
    }
}

  • 压缩流
    * 需求
    * 把文件夹压缩成一个压缩包
package IoStream.zip;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class zipdemo3
{
    public static void main(String[] args) throws IOException
    {
        /*
         *  压缩流
         *     需求
         *        把文件夹压缩成一个压缩包
         */
        //1,创建File对象表示要压缩的文件
        File file = new File(".\\srcc");
        //2,创建File对象表示压缩包的位置(压缩包父级路径)
        File destparent = file.getParentFile();
        //3,创建File对象压缩包的路径
        File dest = new File(destparent,file.getName()+".zip");
        //4,创建压缩流,关联压缩包
        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(dest));
        //5,获取file中的每一个文件,变成ZipEntry对象,放入压缩包中
        toZip(file,zos,file.getName());
        //6,释放资源
    }

    public static void toZip(File file, ZipOutputStream zos , String name) throws IOException
    {
        //进入文件夹
        File[] files = file.listFiles();
        //遍历数组
        for (File f : files)
        {
            if(f.isFile()){
                //判断是文件,变为ZipEntry对象放入压缩包中
                ZipEntry entry = new ZipEntry(name+"\\"+f.getName());//这里路径注意
                zos.putNextEntry(entry);
                FileInputStream fis = new FileInputStream(f);
                //读取文件数据写入压缩包
                int b;
                while ((b = fis.read()) != -1){
                    zos.write(b);
                }
                fis.close();
                zos.closeEntry();
            }
            else{
            //如果是文件夹则,递归
                toZip(f,zos,name+"\\"+f.getName());
            }
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值