栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Zip文件的读取和写入

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Zip文件的读取和写入

在Java中,我们可以直接来读取压缩包(zip包),ZipInputStream就可以直接读取zip包的内容,接下来,我们就来看看zip包的读取和写入。

首先,我们先来看看zip文件的读取,我们在读取zip文件时,首先应该创建一个ZipInputStream,它也是一种FilterInputStream类,我们在创建好ZipInputStream后,通常会传入一个FileInputStream作为数据源,然后,循环调用getNextEntry(),直到返回null,表示zip流结束。

zip文件的读取代码如下:

package com.hpc.wyj04;

import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class Decorator02 {
	public static void main(String[] args) {
		
		try (ZipInputStream in = new ZipInputStream(
				new FileInputStream("e:\button.zip")
                                  ,Charset.forName("gbk"))) {
			ZipEntry zip=null;
			//获取压缩文件中的每个子文件
			while((zip=in.getNextEntry())!=null) {
				System.out.println(zip.getName());
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

既然Java可以直接读取zip文件,我们就可以利用Java程序来进行一个解压缩包的操作,我们只需要在读取zip文件的基础上加上写入的目录和具体的文件即可,具体实现代码如下:

package com.hpc.wyj04;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class Decorator03 {
	public static void main(String[] args) {
		
		//要进行解压缩的zip文件
		File zipFile=new File(
				"C:\Users\我\Documents\Tencent Files\464822504\FileRecv\1-201023201325.zip");
		
		//1、创建解压缩目录
		//获取zip文件的名称
		String zipFileName=zipFile.getName();
		
		//根据zip文件名称,提取压缩目录的名称
		String targetDirName=zipFileName.substring(0,zipFileName.indexOf("."));
		
		//创建解压缩目录
		File targetDir=new File(zipFile.getParent()+"\"+targetDirName);
		
		if(!targetDir.exists()) {
			targetDir.mkdir();  //创建目录
		}
		
		//2、解析读取zip文件
		try ( ZipInputStream in = new ZipInputStream(
                                    new FileInputStream(zipFile),
                                        Charset.forName("gbk"))) {
			
			//遍历zip文件中的每个子文件
			ZipEntry zipentry=null;
			
			while((zipentry=in.getNextEntry())!=null) {
				
				//获取zip压缩包中的子文件名称
				String zipentryFileName=zipentry.getName();
				
				//创建该文件的输出流
				String zipFilePath=targetDir.getPath()+"\"+zipentryFileName;

				//输出流定义在try()块,结束自动清空缓冲区并关闭
				try(BufferedOutputStream bos=new BufferedOutputStream(
                                         new FileOutputStream(zipFilePath))){
					
					//读取该子文件的字节内容
					byte[] buff=new byte[1024];
					int len=-1;
					while((len=in.read(buff))!=-1) {
						bos.write(buff);
					}
				} 
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

接下来,我们来看看将指定文件写入zip文件,和zip文件的读取类似,我们首先需要创建一个ZipOutputStream,通常是包装一个FileOutputStream,然后,每写入一个文件前,先调用putNextEntry(),然后用write()写入byte[ ]数据,写入完毕后调用closeEntry()结束这个文件的打包。

具体实现代码如下:

package com.hpc.wyj04;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;


public class Decorator04 {
	public static void main(String[] args) {
		
		//原始目录
		File file=new File("D:\360安全浏览器下载\advise\css");
		
		//将原始目录中的文件,”写入“zip压缩文件
		try (ZipOutputStream out = new ZipOutputStream(
				                      new FileOutputStream( 
                             file.getParent()+"\"+file.getName()+".zip"))) {
			
			//获取并遍历原始目录下的子文件列表
			File[] files=file.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();
		}
	}

}

ZipOutputStream可以把多份数据写入zip包; 配合FileInputStream和FileOutputStream就可以读写zip文件。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1022712.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号