java实现上传zip解压及判断压缩包文件夹功能
转自: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解压及判断压缩包文件夹功能相关推荐
- Java上传ZIP解压获取图片流
@RequestMapping("/batchUploadImage")public RestResult<ImportVO> batchUploadImage(@Re ...
- java 预览zip_java压缩包上传,解压,预览(利用editor.md和Jstree实现)和下载
java压缩包上传,解压,预览(利用editor.md和Jstree实现)和下载 实现功能:zip文件上传,后台自动解压,Jstree树目录(遍历文件),editor.md预览 采用Spring+Sp ...
- 【SpringBoot项目实战】图片压缩包上传、解压、存储等等一套流程教学
[SpringBoot项目实战]图片压缩包上传.解压.存储等等一套流程教学 前言 一.压缩包上传 1.接口实现 2.获取压缩包的文件名和文件路径 二.压缩包解压并保存 1.处理压缩包文件方法 解压缩步 ...
- ubuntu18.04 Linux包文件解压和安装,文件夹压缩打包
目录 一.bz2 二.zip和unzip 三.tar .tar.gz tar.xz .tgz 四.deb 五.7z [无法输入中文]Ubuntu18.04中使用中文输入法_Linux教程_云网牛站 - ...
- CentOS7下zip解压和unzip压缩文件
1.安装zip.unzip应用. yum install zip unzip 2.压缩和解压文件 以下命令均在/home目录下操作 cd /home #进入/home目录 a.把/home目录下面的m ...
- java实现上传zip/rar压缩文件,自动解压
在pom中添加解压jar依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&q ...
- mysql解压rar至指定文件夹_PHP解压ZIP文件到指定文件夹的方法
本文实例讲述了PHP解压ZIP文件到指定文件夹的方法.分享给大家供大家参考,具体如下: /** * function: 解压zip 格式的文件 * author:friker * date:2015- ...
- C# ASP.NET MVC 图片上传的多种方式(存储至服务器文件夹,阿里云oss)
图片上传时我们进场用到的一个功能今天将他整理了一下写了个demo希望对大家有用 该demo分为如下 1.上传至至服务器文件夹 2.上传至阿里云oss 3.百度webupload上传图片 效果图如下: ...
- ftp上传乱码_ftp同步图片到本地文件夹,ftp同步图片到本地文件夹的实现步骤
建设网站经常需要使用FTP上传文件到远程服务器的空间上.如果使用一般的FTP软件,需要把上传的文件拖动到对应的目录上面实现上传,如果要修改文件,只能够使用FTP默认的方式打开文件,一般都是记事本之类很 ...
最新文章
- 大数据方面核心技术有哪些?新人必读
- redis储存List类型数据
- piwik抓取用户交互行为
- 卷积法求解系统的零状态响应_动态系统的建模与分析
- 基于React开发一个音乐播放器
- Linux中的mce处理--mce学习笔记
- 读《scikiit-learn机器学习》逻辑回归算法
- selenium-绕过登录
- 基于汇编的 C/C++ 协程 - 背景知识
- 使用Origin从图片中准确提取数据
- html如何让标签居中显示,HTML怎么让标签居中
- java 遍历json串_Java遍历json字符串取值的实例
- C++for循环经典九九乘法表打印
- C语言apr_socket,APR分析-高级IO篇
- 分享:git push 时报错 Permission to username/My_python.git denied to deploy key 解决方法
- 深入分析 RTPS协议
- VMware下的Ubuntu连接无线网络解决方案
- signature=5a522a8356f9906b0b775bdada02a4c6,阜阳境内车辆违章信息公示(4月3—4月23)
- :hover的知识点
- 这种 Github 不要写在简历上!你们有没有写过?
热门文章
- GNN教程:GNN 涉及到的基础知识
- python博弈论_博弈论 python
- 高考数学数列题目解题技巧(全新的思路)
- [NSSCTF]roud4 web
- MyBatis 3(2)实体映射 CRUD 操作(XML/注解方式)
- 你好,我有一个系统语音修改的问题,就是系统Yaoyao语音的发音有点别扭,想要修改一下,请问怎么修改?我不是开发人员
- Android开发-如何获取so的路径以及so是x86还是arm架构
- javascript 获取上下左右键盘进行操作
- java在方法中用来抛出异常关键字的是,在Java语言中以下哪个关键字用于在方法上声明抛出异常()...
- androidstudio基于mob平台实现手机号验证