java中Zip的压缩和解压

java提供的ZIP压缩方法

用到了三个类 ZipEntry ZipOutputStream ZipInputStream

代码如下

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

public class Zipyasuojiaya {
	public static void main(String args[]) {
		file2zip("C:\\abcdefg.zip");
		zip2file();
	}

	// 文件转zip文件,这里模拟一个文件夹和文件压缩
	public static void file2zip(String zipPath) {
		try {
			File zipFile = new File(zipPath);
			zipFile.getParentFile().mkdirs();
			ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
					zipPath));

			// 写一个文件
			File f = new File("C:\\1.txt");
			// 添加一个ZipEntry对象
			out.putNextEntry(new ZipEntry("copy1.txt"));
			FileInputStream in = new FileInputStream(f);
			int b;
			while ((b = in.read()) != -1) {
				out.write(b);
			}
			in.close();
			// 在压缩文件中创建一个文件夹
			out.putNextEntry(new ZipEntry("abc/"));
			// 向这个压缩中的文件夹写入一个文件
			File f1 = new File("C:\\1.txt");
			// 注意这里是文件在压缩文件中的位置,在解压的时候它的那么也是这个
			out.putNextEntry(new ZipEntry("abc/copy2.txt"));
			FileInputStream in1 = new FileInputStream(f1);
			int b1;
			while ((b1 = in1.read()) != -1) {
				out.write(b1);
			}
			in1.close();
			System.out.println("压缩完成");
			// 没有关闭的话文件会存在异常
			out.close();
		} catch (Exception e) {
		}
	}

	// 压缩文件转回文件形式
	public static void zip2file() {
		try {
			ZipInputStream in = new ZipInputStream(new FileInputStream(
					"C:\\abcdefg.zip"));
			ZipEntry z = null;
			while ((z = in.getNextEntry()) != null) {
				if (z.isDirectory()) {
					File f = new File("C:\\123\\" + z.getName() + "\\");
					// 这里将文件夹创建,压缩文件夹中的文件也会当做一个个ZipEntry类,文件夹也是一个ZipEntry类。
					f.mkdirs();
				} else {
					File f = new File("C:\\123\\" + z.getName());
					OutputStream out = new FileOutputStream(f);
					int b;
					while ((b = in.read()) != -1) {
						out.write(b);
					}
					out.close();
				}
			}
			// 记得关闭
			in.close();

		} catch (Exception e) {
			// 这里最好写点东西,要不出错也不知道
			e.printStackTrace();
		}
	}
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要实现JavaZip文件压缩解压缩操作,可以使用Java提供的ZipInputStream和ZipOutputStream类。下面是一个简单的示例代码,展示如何高效地解压Zip文件: ```java import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class ZipUtils { public static void unzip(String zipFilePath, String destDirectory) throws IOException { File destDir = new File(destDirectory); if (!destDir.exists()) { destDir.mkdir(); } ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath)); ZipEntry entry = zipIn.getNextEntry(); while (entry != null) { String filePath = destDirectory + File.separator + entry.getName(); if (!entry.isDirectory()) { extractFile(zipIn, filePath); } else { File dir = new File(filePath); dir.mkdir(); } zipIn.closeEntry(); entry = zipIn.getNextEntry(); } zipIn.close(); } private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath)); byte[] bytesIn = new byte[4096]; int read = 0; while ((read = zipIn.read(bytesIn)) != -1) { bos.write(bytesIn, 0, read); } bos.close(); } } ``` 示例代码的`unzip`方法接收两个参数:`zipFilePath`表示要解压缩的Zip文件的路径,`destDirectory`表示解压缩后的文件存放目录。代码首先创建目标文件夹,然后打开Zip文件并逐个读取其ZipEntry,如果是文件就解压缩到目标文件夹,如果是目录就创建对应的目录。解压缩过程使用了`BufferedOutputStream`来提高效率。 要实现Zip文件的压缩,可以使用Java提供的ZipEntry和ZipOutputStream类。下面是一个简单的示例代码,展示如何压缩一个文件或目录为Zip文件: ```java import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipUtils { public static void zip(String sourceFile, String zipFilePath) throws IOException { FileOutputStream fos = new FileOutputStream(zipFilePath); ZipOutputStream zipOut = new ZipOutputStream(fos); File fileToZip = new File(sourceFile); zipFile(fileToZip, fileToZip.getName(), zipOut); zipOut.close(); fos.close(); } private static void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException { if (fileToZip.isHidden()) { return; } if (fileToZip.isDirectory()) { File[] children = fileToZip.listFiles(); for (File childFile : children) { zipFile(childFile, fileName + "/" + childFile.getName(), zipOut); } return; } FileInputStream fis = new FileInputStream(fileToZip); ZipEntry zipEntry = new ZipEntry(fileName); zipOut.putNextEntry(zipEntry); byte[] bytes = new byte[1024]; int length; while ((length = fis.read(bytes)) >= 0) { zipOut.write(bytes, 0, length); } fis.close(); } } ``` 示例代码的`zip`方法接收两个参数:`sourceFile`表示要压缩的文件或目录的路径,`zipFilePath`表示压缩后的Zip文件路径。代码首先创建ZipOutputStream并打开输出文件,然后递归地压缩文件或目录的所有文件,最后关闭输出流。压缩过程使用了`FileInputStream`和`ZipEntry`来逐个读取文件并写入Zip文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值