java 文件压缩流实现文件压缩和解压缩

  • Post author:
  • Post category:java

java.io为我们提供了ZipInputStream、ZipOutputStream两个流。我们可以用它们进行zip文件的压缩和解压缩。

代码

package util;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class ZipUtil {
	public static void zip(File[] src,File tar) {
		try {
			FileOutputStream fos = new FileOutputStream(tar);
			ZipOutputStream zos = new ZipOutputStream(fos);
			for(int i=0; i<src.length; ++i) {
				String fileName = src[i].getName();//获得文件名
				FileInputStream fis = new FileInputStream(src[i]);
				ByteArrayOutputStream baos = new ByteArrayOutputStream();
				int len = -1;
				byte[] buf = new byte[1024];
				while((len = fis.read(buf)) != -1) {
					baos.write(buf, 0, len);
				}
				baos.close();
				fis.close();
				byte[] fileContent = baos.toByteArray();//获得文件内容
				ZipEntry zipEntry = new ZipEntry(fileName);//利用文件名创建条目
				zos.putNextEntry(zipEntry);//插入条目
				zos.write(fileContent);//写入条目内容
				zos.closeEntry();//关闭条目
			}
			zos.close();
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void unZip(File zipFile, File path) {
		try {
			if(!path.exists()) {
				path.mkdirs();
			}
			FileInputStream fis = new FileInputStream(zipFile);
			ZipInputStream zis = new ZipInputStream(fis);
			ZipEntry zipEntry = null;
			while((zipEntry = zis.getNextEntry()) != null) {//获取条目
				String fileName = zipEntry.getName();//获取文件名
				File file = new File(path.getAbsolutePath() + "/./" + fileName);
				ByteArrayOutputStream baos = new ByteArrayOutputStream();
				int len = -1;
				byte[] buf = new byte[1024];
				while((len = zis.read(buf)) != -1) {
					baos.write(buf, 0, len);
				}
				baos.close();
				byte[] fileContent = baos.toByteArray();//获取条目内容(即文件内容)
				FileOutputStream fos = new FileOutputStream(file);
				fos.write(fileContent);
				fos.close();
			}
			
			zis.close();
			fis.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}

测试代码

@org.junit.Test
	public void testZIP() throws Exception {
		File[] files = new File[3];
		files[0] = new File("E:\\waster\\Archiver1\\1.txt");
		files[1] = new File("E:\\waster\\Archiver1\\2.png");
		files[2] = new File("E:\\waster\\Archiver1\\3.txt");
		File zip = new File("E:\\waster\\Archiver2\\bsm.zip");
		ZipUtil.zip(files, zip);
		File path = new File("E:\\waster\\Archiver2");
		ZipUtil.unZip(zip, path);
	}

测试结果

E:\waster\Archiver2文件下生成了bsm.zip文件,并成功解压出三个源文件


版权声明:本文为qq_40424244原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。