`
百合不是茶
  • 浏览: 344481 次
社区版块
存档分类
最新评论

JAVA Zip压缩文件

阅读更多

   从中午开始学习压缩流的使用一直到现在才搞定压缩,最后发现居然是两个反斜杠错了  感觉都不会爱了,,,哈哈

 

java.util.zip包中提供了一系列的类可以来实现zip的压缩,

 

Zip压缩流的创建与其他的流的创建没有什么区别;例如

ZipOutputStream ops = new ZipOutputStream(new FileOutputStream("D:\\test.zip"));

 

ZIP输入流打开后,你可以使用getNextEntry方法来读取ZIP文件中的条目数,该方法返回一个ZipEntry对象。如果到达文件的尾部,getNextEntry返回null:

ZipEntry entry;
while((entry = zin.getNextEntry()) != null) {
   // extract data
   // open output streams
}

 

实现单文件的压缩;

代码如下;

首先在D盘中创建要压缩的文件夹

package ZIP文件流;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectOutputStream.PutField;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * Zip格式的文件压缩
 * @author Administrator
 *
 */
public class Copy2Test {

	public static void main(String[] args) {
		//单文件压缩
	Copy2Txt();

		
	}
	
	/**
	 * 压缩单文件的方法
	 * 1,定义文件压缩输出流
	 * 2,实例化一个文件压缩的对象
	 * 3,创建文件输入流
	 * 4,将输入流写到文件压缩流中
	 * @throws FileNotFoundException 
	 */
	public static void Copy2Txt() {
		try{
			//1,创建文件输出时的文件
		ZipOutputStream ops = new ZipOutputStream(new FileOutputStream("D:\\test.zip"));
		//2,创建输出文件中的对象
		ZipEntry entry = new ZipEntry("ab.txt");
		//创建一个文档注释
		ops.setComment("Here is how we compressed in Java");
		//将对象放到压缩文档中
		ops.putNextEntry(entry);
		 //3,创建文件输入流
		InputStream fis = new FileInputStream("D:\\ab.txt");
//		int len = 0;
//		while ((len = fis.read()) != -1)
//			ops.write(len);
		int len = fis.read();
		while(len !=-1){
			ops.write(len);
			len = fis.read();
			}
		fis.close();
		ops.close();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

 源文件与压缩后的文件

 

源文件中的内容

 压缩文件中的内容

 

 

压缩多个文件的代码如下;

 

package ZIP文件流;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectOutputStream.PutField;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * Zip格式的文件压缩
 * @author Administrator
 *
 */
public class Copy2Test {

	public static void main(String[] args) {
		//多文件压缩
		Copy2Demo();
		System.out.println("//////");
		
	}
	

	
	/***
	 *多文件压缩
	 */
	public static void Copy2Demo() {
		try {
			File file = new File("F:\\test");
			//1,创建文件输出时的文件
			ZipOutputStream zop = new ZipOutputStream(new FileOutputStream("F:\\test.zip"));
		    zop.setComment("多文本压缩");
		    isFile(zop,file,"");
		    zop.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 判断文件还是文件目录
	 * @param zop 输出流
	 * @param file 文件
	 * @param dir 目录名字
	 * @throws IOException 
	 */
	private static void isFile(ZipOutputStream zop,File file,String dir) throws IOException{
		//如果是目录
		
		if(file.isDirectory()){
			//将文件保存到文件数组中
			File[] fil = file.listFiles();
			//遍历出来
			for(File files: fil ){
				
				isFile(zop,files,dir+"\\"+file.getName());
			}
		}else{
			String entryName = null;
			//判断文件名是否为空
			if(!"".equals(dir)){
			  entryName = dir+"\\"+file.getName();
			}
			else{
				entryName = file.getName();
			}
				//根据获取到的名字创建文件对象
				ZipEntry entrys = new ZipEntry(entryName);
				zop.putNextEntry(entrys);
				//创建文件输入流
				InputStream fim = new FileInputStream(file);
				int lens =fim.read();
				while(lens!=-1){
					zop.write(lens);
				    lens = fim.read();
				}
				fim.close();
			
		}
	}
	
}

 源文件与压缩文件

 

压缩文件中被压缩的文件

 压缩文件中Testfile中的文件



 

 

  • 大小: 5.7 KB
  • 大小: 40.2 KB
  • 大小: 89.6 KB
  • 大小: 50.6 KB
  • 大小: 78.8 KB
  • 大小: 49.4 KB
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics