java 流读取zip文件_java读取zip文件方式一——解压后读取

该博客介绍了如何使用Java的ZipFile类来读取zip文件内容,无需解压缩。提供了详细的代码示例,包括设置字符编码,以及遍历并读取zip文件中每个条目的方法。
摘要由CSDN通过智能技术生成

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.nio.charset.Charset;

import java.util.Enumeration;

import java.util.zip.ZipEntry;

import java.util.zip.ZipFile;

/**

* @program:

* @description: 文件解压缩工具类

* @author: Mr.superbeyone

* @create: 2018-10-23 14:04

**/

public class FileUtils {

/**

*  此方法将默认设置解压缩后文件的保存路径为zip文件所在路径

*      即解压缩到当前文件夹下

* @param zip zip文件位置

* @param charsetName 字符编码

*/

public static void unpack(String zip, String charsetName) {

unpack(new File(zip), charsetName);

}

/**

*

* @param zip zip文件位置

* @param outputDir 解压缩后文件保存路径

* @param charsetName 字符编码

*/

public static void unpack(String zip, String outputDir, String charsetName) {

unpack(new File(zip), new File(outputDir), charsetName);

}

/**

*  此方法将默认设置解压缩后文件的保存路径为zip文件所在路径

*      即解压缩到当前文件夹

* @param zip zip文件位置

* @param charsetName 字符编码

*/

public static void unpack(File zip, String charsetName) {

unpack(zip, null, charsetName);

}

/**

*

* @param zip zip文件位置

* @param outputDir 解压缩后文件保存路径

*/

public static void unpack(File zip, File outputDir) {

unpack(zip, outputDir, "");

}

/**

*

* @param zip zip文件位置

* @param outputDir 解压缩后文件保存路径

* @param charsetName 字符编码

*/

public static void unpack(File zip, File outputDir, String charsetName) {

FileOutputStream out = null;

InputStream in = null;

//读出文件数据

ZipFile zipFileData = null;

ZipFile zipFile = null;

try {

//若目标保存文件位置不存在

if (outputDir != null) if (!outputDir.exists()) {

outputDir.mkdirs();

}

if (charsetName != null && charsetName != "") {

zipFile = new ZipFile(zip.getPath(), Charset.forName(charsetName));

} else {

zipFile = new ZipFile(zip.getPath(), Charset.forName("utf8"));

}

//zipFile = new ZipFile(zip.getPath(), Charset.forName(charsetName));

Enumeration extends ZipEntry> entries = zipFile.entries();

//处理创建文件夹

while (entries.hasMoreElements()) {

ZipEntry entry = entries.nextElement();

String filePath = "";

if (outputDir == null) {

filePath = zip.getParentFile().getPath() + File.separator + entry.getName();

} else {

filePath = outputDir.getPath() + File.separator + entry.getName();

}

File file = new File(filePath);

File parentFile = file.getParentFile();

if (!parentFile.exists()) {

parentFile.mkdirs();

}

if (parentFile.isDirectory()) {

continue;

}

}

if (charsetName != null && charsetName != "") {

zipFileData = new ZipFile(zip.getPath(), Charset.forName(charsetName));

} else {

zipFileData = new ZipFile(zip.getPath(), Charset.forName("utf8"));

}

Enumeration extends ZipEntry> entriesData = zipFileData.entries();

while (entriesData.hasMoreElements()) {

ZipEntry entry = entriesData.nextElement();

in = zipFile.getInputStream(entry);

String filePath = "";

if (outputDir == null) {

filePath = zip.getParentFile().getPath() + File.separator + entry.getName();

} else {

filePath = outputDir.getPath() + File.separator + entry.getName();

}

File file = new File(filePath);

if (file.isDirectory()) {

continue;

}

out = new FileOutputStream(filePath);

int len = -1;

byte[] bytes = new byte[1024];

while ((len = in.read(bytes)) != -1) {

out.write(bytes, 0, len);

}

out.flush();

}

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

out.close();

in.close();

zipFile.close();

zipFileData.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

public static void main(String[] args) {

/*File zip=new File("D:\\3D201932815242.zip");

String charsetName="UTF-8";

unpack(zip,charsetName);*/

File file=new File("D:\\3D201932815242\\pic");

File[] files = file.listFiles();

for(File f:files){

if(f.isFile()){

System.out.println(f.getName());

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值