java上传zip文件并解压读取

最近遇到一个这样的需求:传一个压缩包给后台,后台保存后解压读取里面的文件,现学现做。在这里做个记录

文件上传

文件上传有很多方法,这里推荐一个自己感觉挺好用的一种,代码奉上:

 @PostMapping(value = "/import", headers = "content-type=multipart/*")

    public R importSqlLite(@RequestParam("file") MultipartFile file) {
     String path = "C:/Users/aaa/Desktop/新建文件夹/";

            File newFile = new File(path + file.getOriginalFilename());
            //通过CommonsMultipartFile的方法直接写文件(注意这个时候)

            file.transferTo(newFile);
    }

文件解压

参考了很多博客,发现了两中解压方式,一种是用org.apache.tools.zip.ZipFile这个包的 工具一种是SpringBoot自带的net.lingala.zip4j.core.ZipFile。因为用的是SpringBoot项目就用的第二种,代码奉上:

 //解压路径
    private String dest = "C:\\Users\\aaa\\Desktop\\新建文件夹";
    //解压后图片保存的路径
    private String picPath = "C:/Users/aaa/Desktop/新建文件夹/pic";


    public String Uncompress(String source) {
        List picPaths = new ArrayList<>();
        try {
            File zipFile = new File(source);
            ZipFile zFile = new ZipFile(zipFile);// 首先创建ZipFile指向磁盘上的.zip文件

            zFile.setFileNameCharset("GBK");

            File destDir = new File(dest);// 解压目录 
            zFile.extractAll(dest);// 将文件抽出到解压目录
              if (zFile.isEncrypted()) {   
                  zFile.setPassword(password.toCharArray());  // 设置密码   
              }
              zFile.extractAll(dest);      // 将文件抽出到解压目录(解压)   
     
             List headerList = zFile.getFileHeaders(); 
              List extractedFileList= newArrayList(); 
              for(FileHeader fileHeader : headerList) { 
                  if (!fileHeader.isDirectory()) { 
                      extractedFileList.add(new File(destDir,fileHeader.getFileName())); 
                  } 
              } 
              File [] extractedFiles = new File[extractedFileList.size()]; 
             extractedFileList.toArray(extractedFiles); 
              for(File f:extractedFileList){
                System.out.println(f.getAbsolutePath()+"....");
              }

      }catch(ZipException e) {
      } 

你可能感兴趣的:(java后端)