使用java压缩一个文件夹中的任意几个文件

之前有人写过用递归压缩一个文件夹里的所有文件,看了让人受益匪浅,
我这个程序没有那么复杂,但是在我现在的实际的项目中,根本不会用到压缩整个文件夹,需要选择文件来压缩,我就写了这个简单的小程序,贴出来大家分享吧。
package test;

import java.util.ArrayList;
import java.util.List;
import java.util.zip.*;
import java.io.*;
/**
 * 
 * @author lIHUI
 *
 */
public class MyZip {
	/**
	 * 压缩一个文件到一个zip
	 * @param in 输入的文件
	 * @param out 输出的zip名
	 * @param outEntry zip中的条目名
	 */
	public static  void zip(String in,ZipOutputStream out,String outEntry) {
		File inf = new File(in) ;
		FileInputStream ins;
		try {
			if(inf.exists()){
				ins = new FileInputStream(inf);
				out.putNextEntry(new ZipEntry(outEntry));
				int b ;
				while ((b = ins.read()) != -1) {
					out.write(b);
				}
				ins.close();
			}else{
				//按照项目的需要在没有的时候给予提示吧。
				System.out.println("系统找不到指定文件:"+in);
			}
		
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}	 catch (IOException e2) {
			e2.printStackTrace();
		} catch (Exception e3) {
			e3.printStackTrace();
		}
	}
	
	/**
	 * 
	 * @param out 输出的zip名
	 * @param in 输入的目录
	 * @param inEntrys 输入的条目集合
	 */
	public static  void zip(String out,String in,List<String> inEntrys) {
		try {
			OutputStream zipFileName_fileOutputStream = new FileOutputStream(out);
			ZipOutputStream zipOutputStream = new ZipOutputStream(zipFileName_fileOutputStream);
			for(String inEntry:inEntrys){
				zip(in+inEntry,zipOutputStream,inEntry);
			}
			zipOutputStream.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
			
				List<String> inEntrys=new ArrayList<String>();
				inEntrys.add("a.txt");
				inEntrys.add("b.txt");
				//可以加一个实际没有的文件试试
				inEntrys.add("xy.txt");
				
				zip("e:\\a.zip","e:\\a\\",inEntrys);
			
	}
}

你可能感兴趣的:(java)