`

java压缩文件

阅读更多
结合我前面发表一篇文件过滤器,在指定目录下搜索符合条件的文件后,再进行zip格式压缩文件.这个不支持中文,用java.util.zip包下类来压缩在被压缩的文件名有中文乱码的问题,可以使用apache的ant.jar包里的zip压缩类来进行压缩处理,请参考http://www.blogjava.net/mrcmd/archive/2007/08/24/138963.html
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * @author seany
 * 类说明:在指定目录下搜索符合条件的文件后,再进行zip格式压缩文件
 */

public class ZipFileCreator {

	/** 文件目录 */
	private String directoryName;

	public ZipFileCreator(String directoryName) {
		this.directoryName = directoryName;
	}

	/**
	 * 
	 * @param fileList
	 *            文件集合
	 * @param zipFileName
	 *            压缩后的zip文件名
	 * @return 是否压缩成功
	 * @throws Exception
	 */

	public boolean getZipFile(List<String> fileList, String zipFileName)
			throws Exception {
		boolean flag = false;

		BufferedReader in = null;
		FileOutputStream fos = null;
		ZipOutputStream zos = null;
		ZipEntry entry = null;
		File file = null;
		// zip文件全路径名
		String zipFullName = directoryName + File.separator + zipFileName
				+ ".zip";
		try {
			// zip文件中的名字
			String fileName = null;
			fos = new FileOutputStream(zipFullName);
			file = new File(zipFullName);
			zos = new ZipOutputStream(fos);
			int len = 0;
			for (String fileFullName : fileList) {
				in = new BufferedReader(new InputStreamReader(
						new FileInputStream(fileFullName), "iso8859-1"));
				fileName = new File(fileFullName).getName();
				// 压缩到zip文件中
				entry = new ZipEntry(fileName);
				zos.putNextEntry(entry);
				while ((len = in.read()) != -1) {
					zos.write(len);
				}
				zos.closeEntry();
				in.close();
			}
			flag = true;
		} catch (Exception e) {
			e.printStackTrace();
			if ( file.exists()){
				file.delete();
			}
		} finally {
			if (null != zos) {
				zos.close();
				zos = null;
			}
			if (null != fos) {
				fos.close();
				fos = null;
			}
			flag = true;
		}
		return flag;
	}

	/**
	 * 根据指定的目录获取符合条件的文件集合
	 * 
	 * @param extName
	 *            文件扩展名,若为多个用逗号隔开:[xls,zip],若为null,就获得该目录下所有文件
	 * @param partFileStr
	 *            该文件包含的字符串,为null则是所有符合extName的文件
	 * @return List 符合条件的文件集合
	 */
	public List<String> readDirectoryFile(String extName, String partFileStr) {
		List<String> fileList = null;
		File file = new File(directoryName);
		if (file.exists() && file.isDirectory()) {
			fileList = new ArrayList<String>();
			File files[] = null;
			if ( null != extName && !"".equals(extName)){
				FilenameFilter filter = new OnlyExtendName(extName);
				files = file.listFiles(filter);
			} else {
				files = file.listFiles();
			}
			for (File f : files) {
				if (!f.isHidden() && f.canRead()) {
					String path = f.getPath();
					if (null != partFileStr && !"".equals(partFileStr)) {
						if (path.indexOf(partFileStr,
								directoryName.length() + 1) != -1) {
							fileList.add(path);
						}
					} else {
						fileList.add(path);
					}
				}
			}
		}

		return fileList;
	}

	/**
	 * 由文件名数组在当前目录下搜索这些文件的完全路径名,并返回集合
	 * 
	 * @param fileNames
	 * @return
	 */
	public List<String> getFileFullPathByFileName(String fileNames[]) {
		List<String> fileList = null;
		File file = new File(directoryName);
		if (file.exists() && file.isDirectory()) {
			fileList = new ArrayList<String>();
			String fullPath = null;
			File f = null;
			for (String fileName : fileNames) {
				fullPath = file.getPath() + File.separator + fileName;
				f = new File(fullPath);
				if (f.exists() && f.isFile()) {
					fileList.add(fullPath);
				}
			}
		}
		return fileList;
	}

	/**
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		ZipFileCreator zip = new ZipFileCreator("D:/root");

		System.out.println(zip.directoryName);
		List<String> fileList = zip.readDirectoryFile("zip,xls", "200908");
		for (String file : fileList) {
			System.out.println(file);
		}

		zip.getZipFile(fileList, "2009年08月");

	}

}


Apache的ant.jar处理可以参考:http://topic.csdn.net/u/20090212/21/e5344981-47a6-4f35-afcb-8523bd97d483.html

找jar文件请访问:http://www.findjar.com/
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics