转自:https://blog.csdn.net/qq_17025903/article/details/80408180#commentBox

直接上Service,通过代码看思路贯穿整个功能,很多工具类可以复用,文件路径可以去看我博客里的

(使用ResourceBundle国际化资源文件读取properties详解) 这篇制作方法
url:
https://blog.csdn.net/qq_17025903/article/details/75949066
html页面

<span>ZIP:</span> <input type="file" style="width: 170px"  name="hostFileBatch"/><span id="hostCheckResult"></span><br/>  
 <input type="button" value="确认上传" οnclick="checkHostBatchRun()"/> 
 <input type="button" value="运行"  οnclick="hostRun()" id="hostRunResult" disabled="disabled" > 
 <span id="hostResult"></span>
页面js

function checkHostBatchRun(){
    
if(confirm("上传重名文件将会替换掉原有文件,是否继续上传?")){
    //年
    var hostYear=$("#hostYear").val();
    //季度
    var quarter=$("#hostQuarter").find("option:selected").text();
 
     $.ajax({
        type : "POST",
        cache : false,
        dataType : "json",
        data:new FormData($('#hostUploadForm')[0]),
        processData: false,//用于对data参数进行序列化处理 这里必须false
        contentType: false, //必须 ?hostYear="+hostYear+"&quarter="+quarter"
        url : "../uploadController/hostUploadZipBatchRun.htm?hostYear="+hostYear+"&&quarter="+quarter+" ",
        success : function(obj) {
            /* alert(obj.data.msg); */
            var result=obj.data.msg;
            if(result==true){
                $("#hostCheckResult").text("上传成功!").css("color","blue");
                $("#hostRunResult").attr("disabled",false);
            }else{
                $("#hostCheckResult").text("上传失败!").css("color","red");
            }
            
        }
    });    
   }
    
}    
Service

//创建解析器
        MultipartHttpServletRequest mh=(MultipartHttpServletRequest) request;
        //获得文件  
        CommonsMultipartFile cmf=(CommonsMultipartFile) mh.getFile("hostFileBatch");
        //获得原始文件名
        String oriName=cmf.getOriginalFilename(); 
        //拼接年+月
        String path=hostYear.concat(quarter);
//        String path=String.valueOf(year).concat(String.valueOf(month));
        String savePath=Commons.HOST_UPLOAD_PATH+"\\"+path; //保存的路径
//        File storeDirectory=new File(savePath);  
        //判断是不是zip文件
        if(oriName.matches(".*.zip")) {        
            //判断文件目录是否存在
            File file=new File(savePath);
            //不存在 
            if(!file.exists()) {
                //创建文件夹
                file.mkdirs();
            }else {    
                //文件存在则删除
                deleteDir(file);
//                file.delete();
                file.mkdirs(); 
                //删除文件原始路径
                int deletePath=uploadZipDao.deleteOldFile(oriName,savePath);
            }
            //获取文件
            FileItem fileItem=cmf.getFileItem();  
            try {    
                //解压文件到指定目录
                FileUnZip.zipToFile(oriName, savePath);
            } catch (Exception e){
                e.printStackTrace();  
                new File(savePath,oriName).delete();  
            }
            fileItem.delete();    
            //保存路径文件名
            boolean result=addPath(oriName,savePath);
            if(result==true) {
                //执行批处理    
                return true;        
            }
            return false;
        }else {
            //不是zip则返回false
            return false;
        }    
    }
解压工具类

package cn.secure.util;
 
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
 
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
 
public class FileUnZip {
    /**
     * 解压zip文件
     * @author 于公成
     * @param sourceFile,待解压的zip文件;
     *        toFolder,解压后的存放路径
     * @throws Exception
     **/
 
    public static void zipToFile(String sourceFile, String toFolder) throws Exception {
            String toDisk = toFolder;// 接收解压后的存放路径
            ZipFile zfile = new ZipFile(sourceFile, "gbk");// 连接待解压文件 "utf-8"会乱码
            Enumeration zList = zfile.getEntries();// 得到zip包里的所有元素
            ZipEntry ze = null;
            byte[] buf = new byte[1024];
            while (zList.hasMoreElements()) {
            ze = (ZipEntry) zList.nextElement();
            if (ze.isDirectory()) {
                // log.info("打开zip文件里的文件夹:"+ ze.getName() +"skipped...");
                continue;
            }
            OutputStream outputStream = null;
            InputStream inputStream = null;
            try {
                // 以ZipEntry为参数得到一个InputStream,并写到OutputStream中
                outputStream = new BufferedOutputStream(new FileOutputStream(getRealFileName(toDisk, ze.getName())));
                inputStream = new BufferedInputStream(zfile.getInputStream(ze));
                int readLen = 0;
                while ((readLen = inputStream.read(buf, 0, 1024)) != -1) {
                    outputStream.write(buf, 0, readLen);
                }
                inputStream.close();
                outputStream.close();
            } catch (Exception e) {
                // log.info("解压失败:"+e.toString());
                throw new IOException("解压失败:" + e.toString());
            } finally {
                if (inputStream != null) {
                    try {
                        inputStream.close();
                    } catch (IOException ex) {
 
                    }
                }
                if (outputStream != null) {
                    try {
                        outputStream.close();
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }
                inputStream = null;
                outputStream = null;
            
                
            }
 
        }
        zfile.close();
    }
 
    /**
     * 
     * 给定根目录,返回一个相对路径所对应的实际文件名.
     * 
     * @param zippath
     *            指定根目录
     * 
     * @param absFileName
     *            相对路径名,来自于ZipEntry中的name
     * 
     * @return java.io.File 实际的文件
     * 
     */
 
    private static File getRealFileName(String zippath, String absFileName) {
        // log.info("文件名:"+absFileName);
        String[] dirs = absFileName.split("/", absFileName.length());
        File ret = new File(zippath);// 创建文件对象
        if (dirs.length > 1) {
            for (int i = 0; i < dirs.length - 1; i++) {
                ret = new File(ret, dirs[i]);
            }
        }
        if (!ret.exists()) {// 检测文件是否存在
            ret.mkdirs();// 创建此抽象路径名指定的目录
        }
        ret = new File(ret, dirs[dirs.length - 1]);// 根据 ret 抽象路径名和 child
                                                    // 路径名字符串创建一个新 File 实例
        return ret;
    }
    
 
    
    
}

文件递归删除工具类(file.delete方法必须文件为空才能删除,所以用这个递归方法删)

/**
     * 递归删除目录下的所有文件及子目录下所有文件
     * @param dir 将要删除的文件目录
     */
    private static boolean deleteDir(File dir) {
        if (dir.isDirectory()) {
            String[] children = dir.list();
            for (int i=0; i<children.length; i++) {    
                boolean success = deleteDir(new File(dir, children[i]));
                if (!success) {
                    return false;
                }
            }
        }
        // 目录此时为空,可以删除
        return dir.delete(); 
    }
判断zip压缩包是否有文件夹思路

eg:所内 所外俩个文件夹

/**
     * 判断是否存在所内所外俩个文件夹
     * @param oriName
     * @param savePath
     * @return
     * @throws Exception
     */
    private boolean hasFileDirectory(String oriName, String savePath) throws Exception {
          ZipFile zfile = new ZipFile(oriName, "gbk");// 连接待解压文件 "utf-8"会乱码
            Enumeration zList = zfile.getEntries();// 得到zip包里的所    有元素
            ZipEntry ze = null;
            int count = 0;
            while (zList.hasMoreElements()) {
                ze = (ZipEntry) zList.nextElement();
                if (ze.isDirectory()) {
                    if(ze.getName().equals("所内/")) {
                        count+=1;
                    }
                    if(ze.getName().equals("所外/")) {
                        count+=1;
                    }
                }
                    // log.info("打开zip文件里的文件夹:"+ ze.getName() +"skipped...");          
             }
            if(count==2) {
                return true;
            }
        return false;
    }

java实现上传zip解压及判断压缩包文件夹功能相关推荐

  1. Java上传ZIP解压获取图片流

    @RequestMapping("/batchUploadImage")public RestResult<ImportVO> batchUploadImage(@Re ...

  2. java 预览zip_java压缩包上传,解压,预览(利用editor.md和Jstree实现)和下载

    java压缩包上传,解压,预览(利用editor.md和Jstree实现)和下载 实现功能:zip文件上传,后台自动解压,Jstree树目录(遍历文件),editor.md预览 采用Spring+Sp ...

  3. 【SpringBoot项目实战】图片压缩包上传、解压、存储等等一套流程教学

    [SpringBoot项目实战]图片压缩包上传.解压.存储等等一套流程教学 前言 一.压缩包上传 1.接口实现 2.获取压缩包的文件名和文件路径 二.压缩包解压并保存 1.处理压缩包文件方法 解压缩步 ...

  4. ubuntu18.04 Linux包文件解压和安装,文件夹压缩打包

    目录 一.bz2 二.zip和unzip 三.tar .tar.gz tar.xz .tgz 四.deb 五.7z [无法输入中文]Ubuntu18.04中使用中文输入法_Linux教程_云网牛站 - ...

  5. CentOS7下zip解压和unzip压缩文件

    1.安装zip.unzip应用. yum install zip unzip 2.压缩和解压文件 以下命令均在/home目录下操作 cd /home #进入/home目录 a.把/home目录下面的m ...

  6. java实现上传zip/rar压缩文件,自动解压

    在pom中添加解压jar依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&q ...

  7. mysql解压rar至指定文件夹_PHP解压ZIP文件到指定文件夹的方法

    本文实例讲述了PHP解压ZIP文件到指定文件夹的方法.分享给大家供大家参考,具体如下: /** * function: 解压zip 格式的文件 * author:friker * date:2015- ...

  8. C# ASP.NET MVC 图片上传的多种方式(存储至服务器文件夹,阿里云oss)

    图片上传时我们进场用到的一个功能今天将他整理了一下写了个demo希望对大家有用 该demo分为如下 1.上传至至服务器文件夹 2.上传至阿里云oss 3.百度webupload上传图片 效果图如下: ...

  9. ftp上传乱码_ftp同步图片到本地文件夹,ftp同步图片到本地文件夹的实现步骤

    建设网站经常需要使用FTP上传文件到远程服务器的空间上.如果使用一般的FTP软件,需要把上传的文件拖动到对应的目录上面实现上传,如果要修改文件,只能够使用FTP默认的方式打开文件,一般都是记事本之类很 ...

最新文章

  1. 大数据方面核心技术有哪些?新人必读
  2. redis储存List类型数据
  3. piwik抓取用户交互行为
  4. 卷积法求解系统的零状态响应_动态系统的建模与分析
  5. 基于React开发一个音乐播放器
  6. Linux中的mce处理--mce学习笔记
  7. 读《scikiit-learn机器学习》逻辑回归算法
  8. selenium-绕过登录
  9. 基于汇编的 C/C++ 协程 - 背景知识
  10. 使用Origin从图片中准确提取数据
  11. html如何让标签居中显示,HTML怎么让标签居中
  12. java 遍历json串_Java遍历json字符串取值的实例
  13. C++for循环经典九九乘法表打印
  14. C语言apr_socket,APR分析-高级IO篇
  15. 分享:git push 时报错 Permission to username/My_python.git denied to deploy key 解决方法
  16. 深入分析 RTPS协议
  17. VMware下的Ubuntu连接无线网络解决方案
  18. signature=5a522a8356f9906b0b775bdada02a4c6,阜阳境内车辆违章信息公示(4月3—4月23)
  19. :hover的知识点
  20. 这种 Github 不要写在简历上!你们有没有写过?

热门文章

  1. GNN教程:GNN 涉及到的基础知识
  2. python博弈论_博弈论 python
  3. 高考数学数列题目解题技巧(全新的思路)
  4. [NSSCTF]roud4 web
  5. MyBatis 3(2)实体映射 CRUD 操作(XML/注解方式)
  6. 你好,我有一个系统语音修改的问题,就是系统Yaoyao语音的发音有点别扭,想要修改一下,请问怎么修改?我不是开发人员
  7. Android开发-如何获取so的路径以及so是x86还是arm架构
  8. javascript 获取上下左右键盘进行操作
  9. java在方法中用来抛出异常关键字的是,在Java语言中以下哪个关键字用于在方法上声明抛出异常()...
  10. androidstudio基于mob平台实现手机号验证