whycxzp
2025-05-09 f92783da5430037bf80cf28a5cf7091cdecefbb7
src/main/java/com/whyc/util/ZipAndRarUtil.java
@@ -4,16 +4,16 @@
import com.github.junrar.rarfile.FileHeader;
import com.whyc.pojo.FileMessage;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.*;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
public class ZipAndRarUtil {
@@ -21,15 +21,16 @@
        ZipInputStream zipInputStream = null;
        try{
            FileInputStream inputStream = new FileInputStream(zipFileName);
            zipInputStream = new ZipInputStream(new BufferedInputStream(inputStream), StandardCharsets.ISO_8859_1);
            zipInputStream = new ZipInputStream(new BufferedInputStream(inputStream), Charset.forName("GBK"));
            java.util.zip.ZipEntry ze;
            List<FileMessage> list = new ArrayList<>();
            //循环遍历
            while ((ze = zipInputStream.getNextEntry()) != null) {
                FileMessage fileMessage=new FileMessage();
                if (!ze.isDirectory()) {
                    //URLEncoder.encode (ze.getName(), "utf-8")
                    fileMessage.setFileName(URLEncoder.encode (ze.getName(), "utf-8"));
                    //URLEncoder.encode (ze.getName(), "ISO-8859-1")
                    //new String(ze.getName().getBytes(StandardCharsets.ISO_8859_1), "UTF-8")
                    fileMessage.setFileName(ze.getName());
                    fileMessage.setFileSize(ze.getSize());
                    String formatted = ActionUtil.sdfwithALL.format( new Date( ze.getLastModifiedTime().toMillis() ) );
                    fileMessage.setFileTime(formatted);
@@ -45,6 +46,32 @@
                zipInputStream.closeEntry();
            }
        }
    }
    public static List<FileMessage> unZipFiles(String zipFileName){
        File zipFile=new File(zipFileName);
        List<FileMessage> list=new ArrayList<FileMessage>();
        //解决zip文件中有中文目录或者中文文件
        try {
            ZipFile zip = new ZipFile(zipFile, Charset.forName("GBK"));
            for(Enumeration entries = zip.entries(); entries.hasMoreElements();){
                ZipEntry entry = (ZipEntry)entries.nextElement();
                if (!entry.isDirectory()) {
                    InputStream in = zip.getInputStream(entry);
                    //输出文件路径信息
                    FileMessage fileMessage = new FileMessage();
                    fileMessage.setFileName(entry.getName());
                    fileMessage.setFileSize(entry.getSize());
                    String formatted = ActionUtil.sdfwithALL.format(new Date(entry.getLastModifiedTime().toMillis()));
                    fileMessage.setFileTime(formatted);
                    list.add(fileMessage);
                    in.close();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return list;
    }
    public static List<FileMessage> getRarList(String rarFileName) throws IOException {
@@ -85,8 +112,9 @@
        String zipFile="D:\\IDEAWorkSpace\\CadDrawManager\\target\\doc_file\\FGTP-Pack0990000266(BOM)2023.9.25.zip";
        List<FileMessage> list=new ArrayList();
        try {
            list=ZipAndRarUtil.getZipFileList(zipFile);
        } catch (IOException e) {
            //list=ZipAndRarUtil.getZipFileList(zipFile);
            list=ZipAndRarUtil.unZipFiles(zipFile);
        } catch (Exception e) {
            e.printStackTrace();
        }
        for (FileMessage f:list) {