Java 压缩文件

当在使用Java生成需要的文件时,我们可能同时需要将文件进行压缩,这时我们或许就需要用到ZipOutputStream类。ZipOutputStream类可以以ZIP格式写入文件输出实现压缩。通过ZipOutputStream类实现文件压缩步骤如下

1、通过构造器 ZipOutputStream( OutputStream ) 创建ZIP输出流,需要指定压缩文件生成路径,文件格式为ZIP

 ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream("E:/Hello World.zip"));

2、通过 putNextEntry( ZipEntry ) 方法在ZIP输出流中写入ZIP文件条目。ZipEntry 类表示ZIP文件条目,需要通过类中的构造器ZipEntry ( ZipEntry ) 或 ZipEntry ( String ) 创建ZIP文件条目,也可以通过ZipEntry类中的其它方法设置文件条目的其它属性

zipOutputStream.putNextEntry(new ZipEntry("Hello World.txt"));

3、通过字节输入流获取需要压缩的源文件数据,然后使用输入流的字节长度声明字节数组,最后将输入流数据写入字节数组中

InputStream inputStream = new FileInputStream("D:/Hello World.txt");

byte[] buffer = new byte[inputStream.available()];

inputStream.read(buffer);

4、通过 write( byte[] ) 方法将字节数组写入当前 ZIP 条目数据。

zipOutputStream.write(buffer);

5、关闭流

inputStream.close();

zipOutputStream.close();

以下是将指定目录以及目录下所有标准文件和子目录进行压缩实例

    public static void main(String[] args) {
	   
        ZipOutputStream zipOutputStream=null;
	   
        InputStream inputStream=null;

	try { 
		 //创建ZIP输出流	        
	         zipOutputStream = new ZipOutputStream(new FileOutputStream("E:/Hello World.zip"));              
		
	         //声明List集合存放源目录下的文件路径
	         List<String> list = new ArrayList<String>();
	         
	         //通过封装的方法获取源目录下所有标准文件路径		
	         list(new File("D:/Hello World"),list);
			
                 //循环获取到的路径集合添加ZIP条目                             
	         for (String file : list) {
	              
	              //在ZIP输出流中添加ZIP文件条目,需要将获取的路径截取至源目录的相对路径
	              zipOutputStream.putNextEntry(new ZipEntry(file.substring(2)));
	              
	              //通过路径创建输入流,将输入流数据写入字节数组                   
	              inputStream = new FileInputStream(file);
	              
	              byte[] buffer = new byte[inputStream.available()];
	
	              inputStream.read(buffer);
	              
                      //将字节数组写入当前条目数据
	              zipOutputStream.write(buffer);
	
	         }
			    
	} catch (FileNotFoundException e) {
	
	         e.printStackTrace();
			   
	 } catch (IOException e) {
	
	         e.printStackTrace();		
	    
	}finally{
	
	            try {
	
	                //关闭流
	                zipOutputStream.close();
	
	                inputStream.close();
	
	            } catch (IOException e) {
	
	                e.printStackTrace();
	
	            }
	      }
	}
	
	
         //通过递归获取文件夹中所有文件路径的集合
	
	 public static void list(File file, List<String> list) {
	
	            File[] files = file.listFiles();
	
	            for (int i = 0; i < files.length; i++) {
	
	                  if (files[i].isFile()) {
	
	                      list.add(files[i].getPath());
	
	                  } else {
	
	                        if (files[i].list() != null) {
	
	                              list(files[i], list);
	
	                       }		
	                 }
	           }	
	    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值