玖叶教程网

前端编程开发入门

java实现zip文件的解压

一、导入相关依赖包

<dependency>
    <groupId>org.apache.ant</groupId>
    <artifactId>ant</artifactId>
    <version>1.8.1</version>
</dependency>

二、创建相应的工具类

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import com.xxx.xxx.entity.xxx.WkcrWord;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;

/**
 * 解压文件的工具类
 */
public class ZipUtil {

    /**
     * 解压文件
     * @param directory 文件目录
     * @param zip 文件zip的压缩包
     */
    public static List<WkcrWord> unZipFile(String directory, File zip) {
        List<WkcrWord> filePathList=new ArrayList<>();
        try {
            int count;
            int buffer = 2048;
            File file;
            InputStream is;
            FileOutputStream fos;
            BufferedOutputStream bos;
            //根据不同环境,不同的文件,需要使用到不同的编码格式
            ZipFile zipFile = new ZipFile(zip, "GBK");
            Enumeration en = zipFile.getEntries();
            createFolder(directory);
            while (en.hasMoreElements()) {
                byte buf[] = new byte[buffer];
                ZipEntry entry = (ZipEntry) en.nextElement();
                //获取压缩包中的文件的名字
                String fileName = entry.getName();
                if(fileName.contains("/")){
                    fileName=fileName.substring(fileName.lastIndexOf("/")+1);
                }
                String filePath = directory + fileName;
                //根据业务逻辑创建相应的实体类
                WkcrWord wkcrWord=new WkcrWord();
                wkcrWord.setName(fileName);
                wkcrWord.setWordUrl(filePath);
                //根据不同的文件后缀设置正则表达式
                String compile = ".*.doc.*|.*.docx.*";
                //符合的保存
                if(filePath.matches(compile)){
                    filePathList.add(wkcrWord);
                }
                if(entry.isDirectory()){
                    createFolder(filePath);
                }else{
                    file = new File(filePath);
                    file.createNewFile();
                    is = zipFile.getInputStream(entry);
                    fos = new FileOutputStream(file);
                    bos = new BufferedOutputStream(fos, buffer);
                    while ((count = is.read(buf)) > -1) {
                        bos.write(buf, 0, count);
                    }
                    bos.close();
                    fos.close();
                    is.close();
                }
            }
            zipFile.close();
            //遍历当前上传的word进行转化为html进行相应的保存
            filePathList.stream().forEach(wkcrWord-> wkcrWord.setWordTxt(DocTableReadUtil.saveWord(wkcrWord.getWordUrl(),wkcrWord.getName())));
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            zip.delete();
        }
        return filePathList;
    }

    /**
     * 创建目录
     * @param path 文件的目录
     */
    private static void createFolder(String path) {
        try {
            File uploadFilePath = new File(path);
            if (uploadFilePath.exists() == false) {
                uploadFilePath.mkdirs();
            }
        } catch (Exception ex) {
						ex.printStackTrace();
        }
    }
}


发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言