控制层实现文件压缩与下载
???? 之前做的一个项目时遇到下载多个文件,要求先能够在压缩在一并下载.实现原理也很简单,主要就是利用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();}?