论坛首页 Java企业应用论坛

控制层实现文件压缩与下载

浏览 2818 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (3)
作者 正文
   发表时间:2009-05-09   最后修改:2009-05-10

     之前做的一个项目时遇到下载多个文件,要求先能够在压缩在一并下载.实现原理也很简单,主要就是利用Zip流进行压缩.

/**
	 * 多个文件
	 * 
	 * @param files
	 *            所要打包的文件列表
	 * @param outputStream
	 */
	public static void zipFile(List files, ZipOutputStream outputStream) {
		int size = files.size();
		for (int i = 0; i < size; i++) {
			File file = (File) files.get(i);
			zipFile(file, outputStream);
		}
	}

	/**
	 * 根据输入的文件与流对文件进行打包
	 */
	public static void zipFile(File inputFile, ZipOutputStream ouputStream) {
		try {
			if (inputFile.exists()) {
				if (inputFile.isFile()) {
					FileInputStream in = new FileInputStream(inputFile);
					BufferedInputStream bins = new BufferedInputStream(in, 512);
					ZipEntry entry = new ZipEntry(inputFile.getName());
					ouputStream.putNextEntry(entry);
					// 向压缩文件中输出数据
					int nNumber;
					byte[] buffer = new byte[512];
					while ((nNumber = bins.read(buffer)) != -1) {
						ouputStream.write(buffer, 0, nNumber);
						// 关闭创建的流对象
					}
					bins.close();
					in.close();
				} else {
					try {
						File[] files = inputFile.listFiles();
						for (int i = 0; i < files.length; i++) {
							zipFile(files[i], ouputStream);
						}
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
		test(){
					File file = new File("temp.rar");
					if (!file.exists()) {
						file.createNewFile();
					}
					FileOutputStream fous = new FileOutputStream(file);
					ZipOutputStream zipOut = new ZipOutputStream(fous);
					zipFile(files, zipOut);
					zipOut.close();

}

 

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics