Java解压上传zip或rar文件,并解压遍历文件中的html的路径详解编程语言
2023-06-13 09:11:43 时间
public String addFreeMarker() throws Exception { HttpSession session = request.getSession(); User user = (User) session.getAttribute(Constant.USER_SESSION_KEY); String realName = user.getRealName(); System.out.println("--------获取登录用户信息:------------"+realName); /* 截取后缀名 */ if (StringUtil.isEmpty(fileName)) { throw new Exception("文件不能为空"); int pos = fileName.lastIndexOf("."); String str = fileName.substring(pos+1).toLowerCase(); //判断上传文件必须是zip或者是rar否则不允许上传 if (StringUtil.isEmpty(str)||(!str.equals("zip") !str.equals("rar") !str.equals("png") !str.equals("jpg") !str.equals("gif"))) { throw new Exception("上传文件格式错误,请重新上传"); // 时间加后缀名保存 saveName = new Date().getTime() + "."+str; //文件名 saveFileName = saveName.substring(0, saveName.lastIndexOf(".")); // 根据服务器的文件保存地址和原文件名创建目录文件全路径 File imageFile = new File(ServletActionContext.getServletContext() .getRealPath("upload") + "/" +saveFileName+"/"+ saveName); File descFile = new File(ServletActionContext.getServletContext().getRealPath("upload")+"/"+saveFileName); if (!descFile.exists()) { descFile.mkdirs(); //解压目的文件 String descDir = ServletActionContext.getServletContext().getRealPath("upload")+"/"+saveFileName+"/"; copy(myFile, imageFile); //自己生成主键 Long seqNo = freemarkerService.getOrderNumberSeq(); String orderNumber = RandomIdGenerator.generatorOrderNumber(seqNo); HttpServletRequest httpRequest=(HttpServletRequest)request; String httpURL = "http://" + request.getServerName() //服务器地址 + ":" + request.getServerPort() //端口号 + httpRequest.getContextPath(); //项目名称 String URL = httpURL+"/"+"upload"+"/"+saveFileName+"/"+saveName; System.out.println("============访问地址是:============="+ URL); //获取用户信息 freemarker.setFilesId(orderNumber); freemarker.setAuthor(realName); freemarker.setFilesName(saveFileName); freemarker.setFilesUrl(URL); //开始解压zip if (str.equals("zip")) { CompressFileUits.unZipFiles(imageFile, descDir); //文件解压成功后,把数据插入到数据库 freemarkerService.save(freemarker); }else if (str.equals("rar")) { //开始解压rar CompressFileUits.unRarFile(imageFile.getAbsolutePath(), descDir); freemarkerService.save(freemarker); } else if (str.equals("jpg") || str.equals("png") || str.equals("gif")) { /** * 增家java创建html功能,根据指定模板创建html freemarkerService.save(freemarker); //上传的如果是图片的话,就生成html String disrPath = ServletActionContext.getServletContext().getRealPath("template"); String sourcedir = disrPath+"/template.html"; //文件的http的路径 String IMAGEURL = httpURL+"/"+"template"+"/"+saveFileName+".html"; //saveFileName 是文件的上传的文件名称 CreateHtmlUtils.MakeHtml(sourcedir, URL, disrPath, saveFileName); freemarkerDetailService.insertFreeMarkerDetailFile(orderNumber,saveFileName+".html",IMAGEURL,new Date()); } else { throw new Exception("文件格式不正确不能解压"); //遍历文件夹 getFileList(descDir,orderNumber); return SUCCESS; }
2.然后是文件解压的两个类
package com.tydic.eshop.util; 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; import com.github.junrar.Archive; import com.github.junrar.rarfile.FileHeader; public class CompressFileUits { /** * 解压到指定目录 * @param zipPath * @param descDir * @author*/ public static void unZipFiles(String zipPath,String descDir)throws IOException{ unZipFiles(new File(zipPath), descDir); /** * 解压文件到指定目录 * @param zipFile * @param descDir * @author isea533 @SuppressWarnings("rawtypes") public static void unZipFiles(File zipFile,String descDir)throws IOException{ File pathFile = new File(descDir); if(!pathFile.exists()){ pathFile.mkdirs(); ZipFile zip = new ZipFile(zipFile); for(Enumeration entries = zip.getEntries();entries.hasMoreElements();){ ZipEntry entry = (ZipEntry)entries.nextElement(); String zipEntryName = entry.getName(); InputStream in = zip.getInputStream(entry); String outPath = (descDir+zipEntryName).replaceAll("//*", "/");; //判断路径是否存在,不存在则创建文件路径 File file = new File(outPath.substring(0, outPath.lastIndexOf(/))); if(!file.exists()){ file.mkdirs(); //判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压 if(new File(outPath).isDirectory()){ continue; //输出文件路径信息 System.out.println(outPath); OutputStream out = new FileOutputStream(outPath); byte[] buf1 = new byte[1024]; int len; while((len=in.read(buf1)) 0){ out.write(buf1,0,len); in.close(); out.close(); System.out.println("******************解压完毕********************"); /** * 根据原始rar路径,解压到指定文件夹下. * @param srcRarPath 原始rar路径 * @param dstDirectoryPath 解压到的文件夹 public static void unRarFile(String srcRarPath, String dstDirectoryPath) { if (!srcRarPath.toLowerCase().endsWith(".rar")) { System.out.println("非rar文件!"); return; File dstDiretory = new File(dstDirectoryPath); if (!dstDiretory.exists()) {// 目标目录不存在时,创建该文件夹 dstDiretory.mkdirs(); Archive a = null; try { a = new Archive(new File(srcRarPath)); if (a != null) { a.getMainHeader().print(); // 打印文件信息. FileHeader fh = a.nextFileHeader(); while (fh != null) { if (fh.isDirectory()) { // 文件夹 File fol = new File(dstDirectoryPath + File.separator + fh.getFileNameString()); fol.mkdirs(); } else { // 文件 File out = new File(dstDirectoryPath + File.separator + fh.getFileNameString().trim()); //System.out.println(out.getAbsolutePath()); try {// 之所以这么写try,是因为万一这里面有了异常,不影响继续解压. if (!out.exists()) { if (!out.getParentFile().exists()) {// 相对路径可能多级,可能需要创建父目录. out.getParentFile().mkdirs(); out.createNewFile(); FileOutputStream os = new FileOutputStream(out); a.extractFile(fh, os); os.close(); } catch (Exception ex) { ex.printStackTrace(); fh = a.nextFileHeader(); a.close(); } catch (Exception e) { e.printStackTrace(); }
3.常见html的工具类,上篇文章有介绍 CreateHtmlUtils
package com.tydic.eshop.util; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Calendar; * @ClassName: CreateHtmlUtils * @Description: Java 根据模板创建 html * @author * @date 2016年4月22日 下午3:51:16 public class CreateHtmlUtils { public static void main(String[] args) { String filePath = "E://hh_web_space//ecp//web//ecp_web_page//src//main//webapp//template//template.html"; String imagePath ="http://localhost:8080/ecp/upload/1461293787628/1461293787628.jpg"; String disrPath = "E://hh_web_space//ecp//web//ecp_web_page//src//main//webapp//template//"; String fileName = "liuren"; MakeHtml(filePath,imagePath,disrPath,fileName); /** * @Title: MakeHtml * @Description: 创建html * @param filePath 设定模板文件 * @param imagePath 需要显示图片的路径 * @param disrPath 生成html的存放路径 * @param fileName 生成html名字 * @return void 返回类型 * @throws public static void MakeHtml(String filePath,String imagePath,String disrPath,String fileName ){ try { String title = " image src="+"+imagePath+"+"/ "; System.out.print(filePath); String templateContent = ""; FileInputStream fileinputstream = new FileInputStream(filePath);// 读取模板文件 int lenght = fileinputstream.available(); byte bytes[] = new byte[lenght]; fileinputstream.read(bytes); fileinputstream.close(); templateContent = new String(bytes); System.out.print(templateContent); templateContent = templateContent.replaceAll("###title###", title); System.out.print(templateContent); String fileame = fileName + ".html"; fileame = disrPath+"/" + fileame;// 生成的html文件保存路径。 FileOutputStream fileoutputstream = new FileOutputStream(fileame);// 建立文件输出流 System.out.print("文件输出路径:"); System.out.print(fileame); byte tag_bytes[] = templateContent.getBytes(); fileoutputstream.write(tag_bytes); fileoutputstream.close(); } catch (Exception e) { System.out.print(e.toString());
public List File getFileList(String strPath,String fileordernumber) throws ServiceException { File dir = new File(strPath); File[] files = dir.listFiles(); // 该文件目录下文件全部放入数组 List File fileList = new ArrayList File (); if (files != null) { for (int i = 0; i files.length; i++) { String fileName = files[i].getName(); if (files[i].isDirectory()) { // 判断是文件还是文件夹 getFileList(files[i].getAbsolutePath(),fileordernumber); // 获取文件绝对路径 System.out.println("输出文件的绝对路径"+files[i].getAbsolutePath()); } else if (fileName.endsWith("html")) { // 判断文件名是否以.avi结尾 String strFileName = files[i].getAbsolutePath(); System.out.println("------------" + strFileName+"+++++"+fileName); // uploadcompressDetailService.insertCompressDetailFile(fileordernumber,fileName,strFileName,new Date()); freemarkerDetailService.insertFreeMarkerDetailFile(fileordernumber,fileName,strFileName,new Date()); fileList.add(files[i]); } else { continue; return fileList; }
6.其中需要的架包
!-- 导入zip解压包 -- dependency groupId ant /groupId artifactId ant /artifactId version 1.6.5 /version /dependency !-- 导入rar解压包 -- dependency groupId com.github.junrar /groupId artifactId junrar /artifactId version 0.7 /version /dependency
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/16611.html
相关文章
- java文件上传总结[通俗易懂]
- java map 二维数组_Java二维数组实现简单Map
- Java服务器接收上传的文件
- java源程序文件扩展名_JAVA源代码的扩展名为( )
- JAVA 实现 FTP 文件上传、下载和删除
- js文件上传的几种方式_java执行js文件
- JAVA对象转map_java处理字符串类型的map
- java的自定义异常
- Java远程连接Linux服务器并执行命令及上传文件详解编程语言
- Java 加载Properties文件的六种方式详解编程语言
- java客户端模拟表单上传文件详解编程语言
- Java实现FTP文件上传详解编程语言
- Java使用commons-net实现FTP文件上传详解编程语言
- java上传图片文件和回显详解编程语言
- java http post上传文件详解编程语言
- java获取src下包的文件的路径详解编程语言
- Java封装MySQL让编程更简单(java封装mysql)
- Java实现FTP的文件上传详解编程语言
- 如何在Linux系统下有效地启动Java程序,让你的代码在Linux中也能正常运行?(linux下启动java)
- Java Redis实例学习与应用(java redis实例)
- Linux与Java结合:开启全新的编程之旅(linux java())
- java读写文件[多种方法]
- java读写二进制文件的解决方法
- java使用ftp上传文件示例分享
- 应用Java泛型和反射导出CSV文件的方法
- java使用smartupload组件实现文件上传的方法