控制層實現文件壓縮與下載

     之前做的一個項目時遇到下載多個文件,要求先能夠在壓縮在一併下載.實現原理也很簡單,主要就是利用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();

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章