Java解压上传zip或rar文件,并解压遍历文件中的html的路径

1.本文只提供了一个功能的代码

    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());
        }
    }

}

4.复制的方法 copy

  // 复制方法
    public static void copy(File src, File dst) {
        try {
            InputStream in = null;
            OutputStream out = null;
            try {
                in = new BufferedInputStream(new FileInputStream(src),
                        BUFFER_SIZE);
                out = new BufferedOutputStream(new FileOutputStream(dst),
                        BUFFER_SIZE);
                byte[] buffer = new byte[BUFFER_SIZE];
                while (in.read(buffer) > 0) {
                    out.write(buffer);
                }
            } finally {
                if (null != in) {
                    in.close();
                }
                if (null != out) {
                    out.close();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }    

5.便利解压的的zip或者是rar文件夹

/**
     * @throws ServiceException
     * @Title: getFileList
     * @Description: 递归遍历指定文件夹下的文件
     * @param @param strPath
     * @param @return    设定文件
     * @return List<File>    返回类型
     * @throws
     */
    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>            
时间: 2024-10-12 16:20:45

Java解压上传zip或rar文件,并解压遍历文件中的html的路径的相关文章

解压上传的文本文件压缩包并将解压后的文本文件内容插入到数据库

$content = file_get_contents($_FILES["file"]["tmp_name"]); $ret->content = $content; if (file_exists("/var/www/api/uploads//" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"

Java使用HttpURLConnection上传文件

从普通Web页面上传文件很简单,只需要在form标签叫上enctype="multipart/form-data"即可,剩余工作便都交给浏览器去完成数据收集并发送Http请求.但是如果没有页面的话要怎么上传文件呢? 由于脱离了浏览器的环境,我们就要自己去完成数据的收集并发送请求,所以就很麻烦了.首先我们来写个JSP页面并看看浏览器发出的Http请求是什么样的 JSP页面: <html> <head> <meta charset="UTF-8&qu

Java 利用FTP上传,下载文件,遍历文件目录

Java实现FTP上传下载文件的工具包有很多,这里我采用Java自带的API,实现FTP上传下载文件.另外JDK1.7以前的版本与其之后版本的API有了较大的改变了. 例如: JDK1.7之前 JDK1.7 ftpClient = new FtpClinet() ftpClient = FtpClient.create(ip) ftpclient.login(user,password) ftpclient.login(user,null,password) ftpclient.binary()

关于云储存或者百度云的基础问题, 用java/android 实现上传文件到云储存(比如百度云)

============问题描述============ 关于云储存或者百度云的基础问题, 用java/android 实现上传文件到云储存(比如百度云) ============解决方案1============ 参考百度相关api

Java通过ftp上传Linux文件权限问题

背景:Java使用ftp上传文件,此文件允许别的用户去访问.Linux上ftp如下: lftp-3.7.11-4.el5ftp-0.17-35.el5tftp-server-0.49-2 ftp服务器为lftp,可以看到,支持site命令: 所以,我们需要在ftp连接成功后发送命令使用"site umask 022",如下: ftpClient.sendCommand("site umask 022"). 注:权限最高为666,rwrwrw 022代表的是644,r

java头像裁剪上传

原文:java头像裁剪上传 源代码下载地址:http://www.zuidaima.com/share/1550463771118592.htm jsp页面实现头像裁剪上传,带进度条,后台java接收 上传成功后

java实现动态上传多个文件并解决文件重名问题(转)

本文分为两大方面进行讲解: 一.java实现动态上传多个文件 二.解决文件重命名问题java 供大家参考,具体内容如下 1.动态上传多个文件 <script> <form name="xx" action="<c:url value='/Up3Servlet'/>" method="post" enctype="multipart/form-data">   <table id=&qu

java使用httpcomponents 上传文件

一.httpcomponents简介 httpcomponents 是apache下的用来负责创建和维护一个工具集的低水平Java组件集中在HTTP和相关协议的工程.我们可以用它在代码中直接发送http请求,而无需用到页面的js去完成.该项目由一下几个部分组成: 1.HttpComponents Core: HttpCore 是一套的低级别的 HTTP 传输组件可用于构建自定义客户端和服务器端 HTTP 服务与一个最小的足迹.HttpCore 支持两种模型: 阻止基于经典 Java I/O 和非

java FileUpload 组件上传文件

Commons FileUpload Apache提供的一个组件,可以很方便的让我们处理客户端上传的文件, 下载地址 http://commons.apache.org/proper/commons-fileupload/ 下载commons-fileupload.jar,还有其依赖包 commons-io.jar一同下载好,导入工程 有点奇葩的是,在tomcat下已经把這个组建集成了,但是不能正常使用,其源码基本上是一样的. 正确的包名应该是這个:org.apache.commons.file