Java-本地文件的zip打包

package com.common.util;

import org.apache.commons.lang3.StringUtils;
import org.springframework.util.ObjectUtils;

import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * @Description 本地文件zip打包
 * @Author FangYN
 * @Date 2019/12/25
 **/
public class FileZipUtils {
    public static final String imagePath = "/upload/image/";

    /**
     * @param filepath 文件所在目录
     * @param zipPath  压缩后zip文件名称
     * @param dirFlag  zip文件中第一层是否包含一级目录,true包含;false没有
     * @Date: 2019/9/17
     * @Description: 压缩整个文件夹中的所有文件,生成指定名称的zip压缩包
     */
    private void zipMultiFile(String filepath, String zipPath, boolean dirFlag, HttpServletRequest request, List<Map> studentList) {
        ZipOutputStream zipOut = null;
        ZipOutputStream zipFaceOut = null;
        try {
            String diskPath = getUploadFilePath(request);
            File file = new File(diskPath + imagePath + filepath);// 要被压缩的文件夹
            File zipFile = new File(diskPath + imagePath + zipPath);
            zipOut = new ZipOutputStream(new FileOutputStream(zipFile));// 图片压缩文件
            File zipFaceFile = new File(diskPath + imagePath + "faceEngine_" + zipPath);
            zipFaceOut = new ZipOutputStream(new FileOutputStream(zipFaceFile));// 图片特征信息压缩文件

            if (file.isDirectory()) {
                // 图片信息打包
                File[] files = file.listFiles();
                for (File fileSec : files) {
                    int len = fileSec.getName().lastIndexOf(".");
                    String suffix = "";
                    if(len>0)
                        suffix = fileSec.getName().substring(len);
                    for (Map student : studentList) {
                        String code = student.get("CODE").toString();// 匹配编号
                        Object photo = student.get("PHOTO");
                        if (ObjectUtils.isEmpty(photo)) continue;
                        if (fileSec.getName().equals(code+ suffix)) { // 提取学生数据变动的内容图片及特征信息文件
                            String baseDir = "";
                            if (dirFlag)
                                baseDir = file.getName() + File.separator;
                            if(StringUtils.isBlank(suffix)){
                                recursionZip(zipFaceOut, fileSec, baseDir);
                            } else {
                                recursionZip(zipOut, fileSec, baseDir);
                            }
                            break;
                        }
                    }
                }
            }
            zipOut.close();
            zipFaceOut.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != zipOut) {
                try {
                    zipOut.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != zipFaceOut) {
                try {
                    zipFaceOut.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    private void recursionZip(ZipOutputStream zipOut, File file, String baseDir) throws Exception{
        if(file.isDirectory()){
            File[] files = file.listFiles();
            for(File fileSec:files){
                recursionZip(zipOut, fileSec, baseDir + file.getName() + File.separator);
            }
        }else{
            byte[] buf = new byte[1024];
            InputStream input = new FileInputStream(file);
            zipOut.putNextEntry(new ZipEntry(baseDir + file.getName()));
            int len;
            while((len = input.read(buf)) != -1){
                zipOut.write(buf, 0, len);
            }
            input.close();
        }
    }

    /**
     * 获取当前项目所在根目录地址
     * @param request
     * @return
     */
    private static String getUploadFilePath(HttpServletRequest request){
        String savePath = request.getSession().getServletContext().getRealPath("");
        savePath = savePath.substring(0,savePath.lastIndexOf("\\"));
        return savePath+"/";
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ch01:俄罗斯方块游戏的实现 安装JDK,并正确配置环境变量(如果有疑问,可以参考任何一本java入门书籍)。打开Eclipse(可以到http://www.eclipse.org/现在官方最新版,Eclipse本身是免费软件),导入ch01下的java项目,然后保存、运行game.ErsBlocksGame类即可。 Ch02:俄罗斯方块双人对战的实现 安装JDK,并配置环境变量,打开Eclipse,导入java项目ch02,然后保存、运行game.ErsBlocksGame 类即可。 Ch03:五子棋对战游戏的实现 安装JDK、配置环境变量,打开Eclipse导入ch03项目,运行server.chessServer类启动服务器端,运行client.chessClient类启动客户端。目前只支持两个客户端进行网络对战,多个玩家还有如线程同步问题等。两个客户端可以在同一台电脑上运行。 Ch04:多媒体展示系统 –网络游鱼 安装JDK、配置环境变量,打开Eclipse导入ch04项目,运行server.FishServer类启动服务器端,运行java client.SwimFish类启动客户端。注意,同时在多台机上运行客户端才能显示出网络游鱼的效果,在同一台机上打开多个客户端窗口不能看到该效果。 Ch05:野人与传教士过河问题的实现 安装JDK、配置环境变量,打开Eclipse导入ch05项目,运行主类crossriver.CrossRiver即可启动演示程序。 Ch06:人机对战五子棋游戏的实现 安装JDK,配置环境变量,双击compile.bat 批处理文件编译项目,双击runFive.bat批处理文件可启动项目。 Ch07:蚁群算法的模拟实现 安装JDK,配置环境变量,导入ch07项目,一般情况下直接保存、运行ant.UI即可启动程序。如果不能运行,将ch07文件夹下的swt.jar加入构建路径,然后在运行中的JVM参数中加入-Djava.library.path="dll所在目录的绝对路径"即可。 也可以在命令行下直接运行该程序,假设ch07文件夹放在D盘跟目录。则在cmd下切换到ch07文件夹下,运行如下命令即可启动程序: java -cp D:\ch07\swt.jar;.; -Djava.library.path=D:\ch07 ant.UI ch08:SchoolEbay的实现 安装JDK,配置环境变量,安装ant和tomcat,并配置相应环境变量,不清楚的读者可以参见其文档。安装SQL Server 2000或更高版本,注意SQL Server 2000必须打sp3补丁,否则无法监听端口,客户端不能连接。 然后SchoolEbay\database目录下的数据库文件附加到Sql Server,具体操作是打开企业管理器,在左边的树状列表中右击数据库,在弹出的快捷菜单中选择“所有任务”|“附加数据库”命令,再选择要附加的数据库文件即可。 打开控制台(运行中输入cmd),将目录转到SchoolEbay所在目录,输入ant命令来编译打包程序(编译前请修改datasource下的Constants.java文件,将其中的username和passoword修改为SQL Server的用户名和密码)。将生成的SchoolEbay.war添加到Tomcat的webapps目录下,并启动Tomcat、启动Sql Server。访问http://localhost:8080/SchoolEbay/index.jsp,可启动本项目。 Ch09:Ajax技术在网上教学平台的应用 安装JDK,配置环境变量,安装Tomcat、SQL Server并进行相应配置。创建数据库Ajax,然后使用sql目录下的ajaxbak文件还原数据库。为Eclipse安装MyEclipse插件。使用Eclipse导入项目ch09, 在src/config.properties中配置数据库连接信息, 然后部署项目、启动tomcat。 访问http://localhost:8080/ajax即可启动本程序。 Ch10:一个简单的编译器实现 安装JDK、配置环境变量,启动Eclipse并导入ch10项目,运行主类calculator.Calculator即可。 Ch11:基于RMI分布计算实例 安装JDK、配置环境变量,编译java源文件(可以用eclipse自动编译也可以手动命令行下编译),然后命令行下运行如下命令启动服务器端: java rmi.NetS 2000 (端口号为2000)
Android APK反编译 一.反编译Apk得到Java源代码 转载自:http://hi.baidu.com/%CB%BF%D4%B5%CC%EC%CF%C2/blog/item/2284e2debafc541e495403ec.html 工具下载:需用到dex2jar和JD-GUI这2个工具 dex2jar下载地址:http://laichao.googlecode.com/files/dex2jar-0.0.7.8-SNAPSHOT.zip JD-GUI下载地址: windows版JD-GUI:http://laichao.googlecode.com/files/jdgui.zip Linux版JD-GUI:http://laichao.googlecode.com/files/jd-gui-0.3.2.linux.i686.tar.gz 步骤: 1.首先找到Android软件安装包中的classes.dex 把.apk文件改名为.zip,然后解压缩,得到其中的classes.dex文件,它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件 2.把classes.dex拷贝到dex2jar.bat所在目录。 在命令行模式下定位到dex2jar.bat所在目录,运行 dex2jar.bat classes.dex ,生成classes.dex.dex2jar.jar 3.运行JD-GUI工具(它是绿色无须安装的) 打开上面的jar文件,即可看到源代码 --------------------------------------------------------------------------------- --------------------------------------------------------------------------------- 二.反编译apk生成程序的源代码和图片、XML配置、语言资源等文件。 转载自:http://blog.sina.com.cn/s/blog_5752764e0100kv34.html 工具下载: 在http://code.google.com/p/android-apktool/下 载获得,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。 步骤: 1.解压缩下载的两个文件包,apktool-install-windows-2.1_r01-1.zip解压缩后得到的包里有aapt.exe 和apktool.bat.(注意要把apktool-1.0.0.tar.bz2解压后的一个.jar 文件copy进来) 2.打开命令窗口 (开始 > 运行,输入cmd,回车。)进入到apktool.bat的文件夹里。 输入: apktool d C:\***.apk C:\***文件夹 (命令行解释:apktool d 要反编译的文件 输出文件夹) 特别注意:你要反编译的文件一定要放在C盘的根目录里, 3.打开 C:\***文件夹 就可以得到我们学院的各种资源了。 三.将反编译完的文件重新打包成apk 很简单,只要输入: apktood b c:***文件夹(你编译出来文件夹)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值