当前位置: 首页 > news >正文

FileTools.readShpZip 方法说明

功能概述

readShpZip方法根据ZIP文件路径,将其解压到指定的上传目录,并返回解压后的目录路径。


执行步骤

步骤说明
1校验参数,检查文件是否存在
2提取文件名(去除.zip后缀)作为解压目录名
3调用extractZip解压文件
4验证解压结果,返回解压目录路径

核心代码

readShpZip 方法

publicstaticStringreadShpZip(StringfilePath,StringuploadPath)throwsIOException{StringdirPath="";// 参数校验if(filePath==null||uploadPath==null){thrownewIllegalArgumentException("文件路径和上传路径不能为空");}Filefile=newFile(filePath);if(file.exists()){try{// 获取文件名,去除.zip后缀StringoriginalFilename=file.getName();if(!originalFilename.toLowerCase().endsWith(".zip")){thrownewCommonException("文件名无效或不是 ZIP 文件");}StringfileName=originalFilename.substring(0,originalFilename.length()-4);dirPath=uploadPath+File.separator+fileName;// 解压try(InputStreaminputStream=newFileInputStream(file)){FileTools.extractZip(inputStream,dirPath);}// 验证解压结果FiledecompressionDir=newFile(dirPath);if(!decompressionDir.exists()||!decompressionDir.isDirectory()){thrownewCommonException("解压失败:目标目录未生成");}}catch(Exceptione){e.printStackTrace();}}else{thrownewCommonException("旧文件不存在或损坏,请重新上传");}returndirPath;}

extractZip 解压核心方法

publicstaticvoidextractZip(InputStreamzipInputStream,StringdestDirPath)throwsIOException{PathdestDir=Paths.get(destDirPath);Files.createDirectories(destDir);// 写入临时文件PathtempZip=Files.createTempFile("extract_",".zip");try{Files.copy(zipInputStream,tempZip,StandardCopyOption.REPLACE_EXISTING);if(Files.size(tempZip)==0)thrownewIOException("ZIP 文件为空");// 暴力扫描模式解压intcount=forceExtractBySignature(tempZip,destDir);if(count>0){System.out.println("解压完成,共 "+count+" 个文件");return;}thrownewIOException("无法解压此文件");}finally{Files.deleteIfExists(tempZip);}}// 暴力扫描模式:逐字节查找PK签名解压privatestaticintforceExtractBySignature(PathzipFile,PathdestDir)throwsIOException{byte[]data=Files.readAllBytes(zipFile);intpos=0,count=0;while(pos<data.length-4){if(data[pos]=='P'&&data[pos+1]=='K'&&data[pos+2]==3&&data[pos+3]==4){try(InputStreamslice=newByteArrayInputStream(data,pos,data.length-pos);ZipArchiveInputStreamzis=newZipArchiveInputStream(slice,"GBK",true,true)){ZipArchiveEntryentry=zis.getNextZipEntry();if(entry!=null&&!entry.isDirectory()){Stringname=entry.getName();Pathpath=destDir.resolve(name).normalize();if(path.startsWith(destDir)){// 防路径穿越Files.createDirectories(path.getParent());try(OutputStreamos=Files.newOutputStream(path)){IOUtils.copy(zis,os);count++;}}}}catch(Exceptionignored){}}pos++;}returncount;}

执行流程

文件路径 + 上传目录 ↓ 参数校验 ──→ 抛出异常 ↓ 文件存在? ──→ 抛出异常 ↓ 提取文件名(去.zip) → 构建解压目录路径 ↓ extractZip解压 ──→ 暴力扫描PK签名 ↓ 验证目录是否生成 ──→ 抛出异常 ↓ 返回解压目录路径

入参说明

参数名类型必填说明
filePathStringZIP压缩包的完整路径
uploadPathString解压目标目录路径

返回值

类型说明
String解压后的目录路径

调用示例

StringzipFilePath="/upload/temp/shp_data.zip";StringuploadDir="/upload/shp";StringdecompressionPath=FileTools.readShpZip(zipFilePath,uploadDir);// 返回: /upload/shp/shp_data
http://www.jsqmd.com/news/911116/

相关文章:

  • 2026年安徽门业塑粉采购指南:防盗门铸铝门不锈钢专用粉深度评测 | 高端金属绑定粉专业制造商超流平薄涂工艺仿铜打底粉安徽运营中心本地化服务 - 企业品牌优选推荐官
  • 佛山自动化机械行业观察:博鸿自动化 —— 专业全自动攻牙机与钻孔攻牙一体机的实力体现 - 资讯焦点
  • 别再只玩AWS控制台了!手把手教你在阿里云ECS上从零部署AWS DeepRacer训练环境
  • # 2026年国内挂包展示架/鞋子展示架批发厂商实力排行榜:广东广州等地技术成熟,基于展示用品行业的5大权威推荐榜单 - 十大品牌榜
  • OptiSystem应用:无人机(UAV)中继通信系统仿真
  • 微信聊天记录永久保存与智能分析:WeChatMsg工具完全指南
  • 选型不踩坑 专业 FEA 分析服务 精度与效率综合盘点 - 品牌榜中榜
  • 2026年东莞黄江优质装修企业盘点:本土实力品牌赋能品质家装 - 资讯速览
  • 2026年北京搬家公司选择指南:从小件搬运到整体迁移的一站式解决方案 - 优质企业观察收录
  • 北京配眼镜哪家口碑好颜值高?西城区正规门店实测攻略 - 资讯焦点
  • 2026年全国X大饰品陈列展示道具公司推荐!2026最新排名出炉,广州市锦秀展示用品有限公司优势突出(广东广州等地) - 十大品牌榜
  • 终极命名实体识别工具:Changchun_Ascend/bert-large-NER模型全面解析与应用指南
  • 嵌入式传感器数据处理:EWMA低通滤波器的原理与MicroPython实现
  • 26年全国光伏电站回收资质与服务盘点:多家厂商优势解读 - 资讯速览
  • 2026 年 5 月亨得利售后维修全攻略 | 全国门店地址、服务项目与联系电话完整收录 - 资讯速览
  • 2026 年北京风水师权威推荐排行榜:正统传承与实战落地并重 - 资讯速览
  • 郑州铝艺大门厂家不知道怎么选,河南欧园居金属制品有限公司-欧园居为您解答! - 资讯焦点
  • 2026年东莞潮玩行业优质法律顾问机构盘点 专业法律服务赋能产业高质量发展 - 资讯速览
  • 低成本DIY多通道PEMF治疗设备:从原理到制作的完整指南
  • 2026年北京口碑最好的宣传片拍摄公司榜单揭晓 - 资讯速览
  • 博客迁移:从obsidian到csdn
  • 矩阵系统为什么正在成为企业内容供应链的核心节点
  • 2026年东莞建筑行业优质法律顾问律所盘点 专业赋能行业合规发展 - 资讯速览
  • 2026南京西装定制老牌哪家强?5大金陵专业店铺权威推荐 - 西装爱好者
  • 2026北京丰台公司异常不用愁!本地靠谱代办机构首选推荐 - 小柏云
  • 细分行业精准获客,化工仪器网/仪表网/机床商务网等平台GEO优化适配场景详解 - 品牌推荐大师1
  • 东莞定制网站公司哪家专业?2026年东莞高端网站建设服务商十家推荐 - 资讯速览
  • 双头攻牙机怎么选才能效率翻倍?博鸿自动化拆解三大核心技术,伺服控制与多重检测让两端攻牙一步到位 - 资讯焦点
  • 苏州购买正品爱格板、可丽芙板的渠道及真假授权辨别方法 - 高定
  • 为什么越来越多企业开始建设内容中台?矩阵系统正在成为关键支撑