java讀取zip文件方式一——解壓后讀取

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 {

? ? /**

? ? *? 此方法將默認(rèn)設(shè)置解壓縮后文件的保存路徑為zip文件所在路徑

? ? *? ? ? 即解壓縮到當(dāng)前文件夾下

? ? * @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);

? ? }

? ? /**

? ? *? 此方法將默認(rèn)設(shè)置解壓縮后文件的保存路徑為zip文件所在路徑

? ? *? ? ? 即解壓縮到當(dāng)前文件夾

? ? * @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;

? ? ? ? //讀出文件數(shù)據(jù)

? ? ? ? ZipFile zipFileData = null;

? ? ? ? ZipFile zipFile = null;

? ? ? ? try {

? ? ? ? ? ? //若目標(biāo)保存文件位置不存在

? ? ? ? ? ? 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();

? ? ? ? ? ? //處理創(chuàng)建文件夾

? ? ? ? ? ? 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());

? ? }

? ? }


}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容