• java实现文件的压缩和解压


    java实现文件的压缩和解压


    代码压缩实现

    
    package com.hjh.demo.zip;
    
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.zip.CRC32;
    import java.util.zip.CheckedOutputStream;
    
    //使用org.apache.tools.zip这个就不会中文乱码  来自于ant.jar 
    import org.apache.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipOutputStream;
      
    //使用java.util.zip原生ZipOutputStream与ZipEntry会中文乱码  
      
    //import java.util.zip.ZipOutputStream;  
    //import java.util.zip.ZipEntry;  
     
    public class TestZip   
    {  
        static String filePath = "F:/test/json.txt";//需要压缩的文件夹完整路径  
        static String fileName = "zip";//需要压缩的文件夹名  
        static String outPath = "F:/test/zip/Test.zip";//压缩完成后保存为Test.zip文件,名字随意  
          
        public static void main(String args[]) throws Exception  
        {  
            OutputStream is = new FileOutputStream(outPath);//创建Test.zip文件  
            CheckedOutputStream cos = new CheckedOutputStream(is, new CRC32());//检查输出流,采用CRC32算法,保证文件的一致性  
            ZipOutputStream zos = new ZipOutputStream(cos);//创建zip文件的输出流  
            zos.setEncoding("GBK");//设置编码,防止中文乱码  
            File file = new File(filePath);//需要压缩的文件或文件夹对象  
    //        ZipFile(zos,file);//压缩文件的具体实现函数  
            zipFileContent(zos,file);
            zos.close();  
            cos.close();  
            is.close();  
            System.out.println("压缩完成");  
        }  
          
        public static void zipFileContent(ZipOutputStream zos,File file) throws Exception 
        {
        	if(file.isDirectory())
        	{
        		for(File f : file.listFiles())
        		{
        			zipFileContent(zos, f);
        		}
        	}
        	else
        	{
        		//用字节方式读取源文件  
                InputStream is = new FileInputStream(file.getPath());
     
                //创建一个缓存区  
                BufferedInputStream bis = new BufferedInputStream(is);  
                
                //字节数组,每次读取1024个字节  
                byte [] b = new byte[1024];
                
                zos.putNextEntry(new ZipEntry(file.getName()));
                //循环读取,边读边写  
                while(bis.read(b) != -1)  
                {  
                    zos.write(b);//写入压缩文件  
                }  
                
                //关闭流  
                bis.close();  
                is.close(); 
        	}
        }
        
        //递归,获取需要压缩的文件夹下面的所有子文件,然后创建对应目录与文件,对文件进行压缩  
        public static void ZipFile(ZipOutputStream zos,File file) throws Exception  
        {  
            if(file.isDirectory())  
            {  
                //创建压缩文件的目录结构  
                zos.putNextEntry(new ZipEntry(file.getPath().substring(file.getPath().indexOf(fileName))+File.separator));  
      
                for(File f : file.listFiles())  
                {  
                    ZipFile(zos,f);  
                }  
            }  
            else  
            {  
                //打印输出正在压缩的文件  
                System.out.println("正在压缩文件:"+file.getName());  
                //创建压缩文件  
                zos.putNextEntry(new ZipEntry(file.getPath().substring(file.getPath().indexOf(fileName))));  
                //用字节方式读取源文件  
                InputStream is = new FileInputStream(file.getPath());  
                //创建一个缓存区  
                BufferedInputStream bis = new BufferedInputStream(is);  
                //字节数组,每次读取1024个字节  
                byte [] b = new byte[1024];  
                //循环读取,边读边写  
                while(bis.read(b)!=-1)  
                {  
                    zos.write(b);//写入压缩文件  
                }  
                //关闭流  
                bis.close();  
                is.close();  
            }  
        }  
    }  
    
    


    代码解压实现

    
    package com.hjh.demo.zip;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Enumeration;
    import java.util.zip.CRC32;
    import java.util.zip.CheckedInputStream;
    
    //使用org.apache.tools.zip这个就不会中文乱码 来自于ant.jar 
    import org.apache.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipFile;
      
    //使用java.util.zip原生ZipOutputStream与ZipEntry会中文乱码  
    //import java.util.zip.ZipEntry;  
    //import java.util.zip.ZipFile;  
       
    public class TestUnzip   
    {  
        static String zipPath = "F:/test/zip/Test.zip";//需要解压的压缩文件  
        static String outPath = "F:/test/zip/unzip/";//解压完成后保存路径,记得"\"结尾哈  
          
        public static void main(String args[]) throws Exception  
        {  
            ZipFile zipFile = new ZipFile(zipPath,"GBK");//压缩文件的实列,并设置编码  
            //获取压缩文中的所以项  
            for(Enumeration<ZipEntry> enumeration = zipFile.getEntries();enumeration.hasMoreElements();)  
            {  
                ZipEntry zipEntry = enumeration.nextElement();//获取元素  
                System.out.println("解压到的条目 : " + zipEntry.getName());
                //排除空文件夹  
                if(!zipEntry.getName().endsWith(File.separator))  
                {  
    //                System.out.println("正在解压文件:"+zipEntry.getName());//打印输出信息  
                    OutputStream os = new FileOutputStream(outPath+zipEntry.getName());//创建解压后的文件  
                    BufferedOutputStream bos = new BufferedOutputStream(os);//带缓的写出流  
                    InputStream is = zipFile.getInputStream(zipEntry);//读取元素  
                    BufferedInputStream bis = new BufferedInputStream(is);//读取流的缓存流  
                    CheckedInputStream cos = new CheckedInputStream(bis, new CRC32());//检查读取流,采用CRC32算法,保证文件的一致性  
                    byte [] b = new byte[1024];//字节数组,每次读取1024个字节  
                    //循环读取压缩文件的值  
                    while(cos.read(b)!=-1)  
                    {  
                        bos.write(b);//写入到新文件  
                    }  
                    cos.close();  
                    bis.close();  
                    is.close();  
                    bos.close();  
                    os.close();  
                }  
                else  
                {  
                    //如果为空文件夹,则创建该文件夹  
                    new File(outPath+zipEntry.getName()).mkdirs();  
                }  
            }  
            System.out.println("解压完成");  
            zipFile.close();  
        }  
    }  
    
    
  • 相关阅读:
    java web开发中会遇到的异步执行方案
    MySQL中进行树状所有子节点的查询
    node.js ----NPM使用介绍
    Node.js--学习笔记
    node.js介绍及Win7环境安装测试(转)
    Jmeter中Websocket协议支持包的使用(转)
    jmeter---将回应数据写入到文件
    JMeter 插件 Json Path 解析 HTTP 响应 JSON 数据(转)
    python + Pyglet ---播放视频
    转 RTSP客户端模拟器(TCP方式,Python实现)
  • 原文地址:https://www.cnblogs.com/qixidi/p/10219633.html
Copyright © 2020-2023  润新知