zip压缩文件的读取与写入

zip的读取和写入需要引入zipInputStream和zipOutStream

读取zip文件时,一般要在ziplnputStream传入一个FileinputStream作为数据源,并且需要循环调用getNextStream(),当返回值为null是循环结束, getNextStream()方法的返回值类型为zipEntry,作用是为了获取压缩文件的每个子文件,要想获取压缩文件的内容,就需要调用read() 进行不断的读取,直到返回-1.

代码如下:

public class Damo01 { 
	public static void main(String[] args) {
		//要进行解压缩的文件
		File file = new File("F:\\陈嘻嘻\\1-201023201325.zip");
		//获取文件名
		String zipfilename = file.getName();
		//根据zip文件名称,根据压缩目录名称
		String zipname =zipfilename.substring(0,zipfilename.indexOf("."));
		//创建解压目录
		File tagt = new File(file.getParent()+"\\"+zipname);
		if (!tagt.exists()) {
			tagt.mkdir();//创建目录
		}
		//
		try (ZipInputStream zipin = new ZipInputStream(new FileInputStream(file),Charset.forName("gbk"))) {
			//
			ZipEntry zipentry = null;
			//
			while ((zipentry=zipin.getNextEntry())!=null) {
				//获取zip压缩包子文件名称
				String zipname1 = zipentry.getName();
				System.out.println(zipname1);
				//创建文件输出流
				String filepath =tagt.getPath()+"\\"+zipname1;
				System.out.println(filepath);
				try(BufferedOutputStream bt = new BufferedOutputStream(new FileOutputStream(filepath))) {
				//读取该文件的字节内容
				byte[] by = new byte[1024];
				int len  =-1;
				while ((len = zipin.read(by))!=-1) {
					bt.write(by,0,len);  
					} 
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
}

zip文件的写入,即将文件打包成为压缩包,同样的将文件打包成为压缩包,需要引入zipOutStream,也要需要传入一个inputStream的子类作为数据源,

首先需要调用putNextEntry()方法,目的是为了创建一个ZipEntry,然后调用write()方法将原文件的字节文件内容,写入zip压缩包,需要注意的是写入的压缩包应与原始目录在同一父级目录下。

代码如下:

public class Damo02 {
	public static void main(String[] args) {
		//原始目录
		File rootDir = new File("F:\\陈嘻嘻\\新建文件夹");
		//将原始目录中的文件写入zip压缩文件
		try (ZipOutputStream out = new ZipOutputStream(new FileOutputStream(rootDir.getParent()+"\\"+rootDir.getName()+".zip"))) {
			//获取并遍历原始目录下的子文件列表
			File[] files = rootDir.listFiles();
			for (File f : files) {
				//创建一个zipEntry
				out.putNextEntry(new ZipEntry(f.getName()));
				//将原文件的字节内容,写入zip压缩包
				out.write(Files.readAllBytes(f.toPath()));
				//结束当前zipEntry
				out.closeEntry();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值