欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java实现多文件的zip压缩和解压缩

程序员文章站 2024-03-13 23:38:52
...

压缩为zip文件

1. 通过java程序输出文件

/**
 * 功能:压缩多个文件成一个zip文件
 * @param srcfile:源文件列表
 * @param zipfile:压缩后的文件
 */
public static void zipFiles(File[] srcfile, File zipfile) {
	byte[] buf = new byte[1024];
	try {
		//ZipOutputStream类:完成文件或文件夹的压缩
		ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile));
		for (int i = 0; i < srcfile.length; i++) {
			FileInputStream in = new FileInputStream(srcfile[i]);
			// 给列表中的文件单独命名
			out.putNextEntry(new ZipEntry(srcfile[i].getName()));
			int len;
			while ((len = in.read(buf)) > 0) {
				out.write(buf, 0, len);
			}
			out.closeEntry();
			in.close();
		}
		out.close();
		System.out.println("压缩完成.");
	} catch (Exception e) {
		e.printStackTrace();
	}
}

2. 通过浏览器下载文件(返回文件流)

/**
 * 功能:压缩多个文件,输出压缩后的zip文件流
 * @param srcfile:源文件列表
 * @param zipFileName:压缩后的文件名
 */
@GetMapping(value = "/downzip")
public ResponseEntity<byte[]> zipFiles(File[] srcfile, String zipFileName) {
    byte[] buf = new byte[1024];
    // 获取输出流
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    try {
        // ZipOutputStream类:完成文件或文件夹的压缩
        ZipOutputStream out = new ZipOutputStream(bos);
        for (int i = 0; i < srcfile.length; i++) {
        	// 此处可用任意其他输入流将FileInputStream取代,outputStream为其他步骤的输出流
        	// ByteArrayInputStream in = new ByteArrayInputStream(outputStream.toByteArray());
            FileInputStream in = new FileInputStream(srcfile[i]);
            // 给列表中的文件单独命名
            out.putNextEntry(new ZipEntry(srcfile[i].getName()));
            int len;
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            out.closeEntry();
            in.close();
        }
        out.close();
        bos.close();
        System.out.println("压缩完成.");
    } catch (Exception e) {
        e.printStackTrace();
    }
    // 设置http响应头
    HttpHeaders header = new HttpHeaders();
    header.add("Content-Disposition", "attachment;filename=" + zipFileName + ".zip");
    return new ResponseEntity<byte[]>(bos.toByteArray(), header, HttpStatus.CREATED);
}

解压缩zip文件


```java
/**
 * 功能:解压缩
 * @param zipfile:需要解压缩的文件
 * @param descDir:解压后的目标目录
 */
public static void unZipFiles(File zipfile, String descDir) {
	try {
		ZipFile zf = new ZipFile(zipfile);
		for (Enumeration entries = zf.entries(); entries.hasMoreElements();) {
			ZipEntry entry = (ZipEntry) entries.nextElement();
			String zipEntryName = entry.getName();
			InputStream in = zf.getInputStream(entry);
			OutputStream out = new FileOutputStream(descDir + zipEntryName);
			byte[] buf1 = new byte[1024];
			int len;
			while ((len = in.read(buf1)) > 0) {
				out.write(buf1, 0, len);
			}
			in.close();
			out.close();
			System.out.println("解压缩完成.");
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
}
相关标签: zip压缩和解压缩