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 {

    /**

    *  此方法将默认设置解压缩后文件的保存路径为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 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 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());

    }

    }


}

}

你可能感兴趣的:(java读取zip文件方式一——解压后读取)