Java 解压带密码的zip,读取zip中的txt文件和图片,txt内容添加数据库,复制图片,ssm框架定时器

1 篇文章 0 订阅
1 篇文章 0 订阅

定时任务,解压本地带密码的zip,将里面的图片进行复制到其他文件夹,将文件里的txt信息写入数据库

只适用于Java ssm框架

配置springmvc.xml

<!-- 设置定时任务 -->
	<task:annotation-driven/>

解压带密码的zip

一、unZipUtils工具类

1.source zip绝对路径,
2.dest 解压的绝对路径,
3.password zip密码

public static void main(String[] args) throws IOException {
	SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
	
	UnZipUtils z = new UnZipUtils();
	
	String source = "F:\\"+df.format(new Date())+".zip";
	
	String dest = "g:\\"+df.format(new Date())+"";
	
	
	String password = "password";
	
	z.unZip(source,dest,password);
}

/**
* @param source 原始文件路径
* @param dest 解压路径
* @param password 解压文件密码(可以为空)
*/
public boolean unZip(String source,String dest,String password){
		try {
		File zipFile = new File(source);
		
		
		ZipFile zFile = new ZipFile(zipFile); // 首先创建ZipFile指向磁盘上的.zip文件
		
		
		zFile.setFileNameCharset("GBK");
		
		
		File destDir = new File(dest); // 解压目录
		
		if(!destDir.exists()){// 目标目录不存在时,创建该文件夹
			destDir.mkdirs();
		}
		if (zFile.isEncrypted()) {
			zFile.setPassword(password.toCharArray()); // 设置密码
		}

		
		zFile.extractAll(dest); // 将文件抽出到解压目录(解压)
		
		
		@SuppressWarnings("unchecked")
		List<net.lingala.zip4j.model.FileHeader> headerList = zFile.getFileHeaders();
		
		
		List<File> extractedFileList = new ArrayList<File>();


		for (FileHeader fileHeader : headerList) {
			if (!fileHeader.isDirectory()) {
					extractedFileList.add(new File(destDir, fileHeader.getFileName()));
			}
		}


	File[] extractedFiles = new File[extractedFileList.size()];
	
	
	extractedFileList.toArray(extractedFiles);


//	for (File f : extractedFileList) {
//		System.out.println(f.getAbsolutePath() + "文件解压成功!");
//	}

	return true;
	} catch (ZipException e) {
	e.printStackTrace();
	return false;
	}
	}

读取txt内容

二、ReadTxtUtil工具类

1.path txt绝对路径

/**
     * 读取一个文本 一行一行读取
     *
     * @param path
     * @return
     * @throws IOException
     */
    public static List<String> readFile(String path) throws IOException {
        // 使用一个字符串集合来存储文本中的路径 ,也可用String []数组
        List<String> list = new ArrayList<String>();
        FileInputStream fis = new FileInputStream(path);
        // 防止路径乱码   如果utf-8 乱码  改GBK     eclipse里创建的txt  用UTF-8,在电脑上自己创建的txt  用GBK
        InputStreamReader isr = new InputStreamReader(fis, "GBK");
        BufferedReader br = new BufferedReader(isr);
        String line = "";
        while ((line = br.readLine()) != null) {
            // 如果 t x t文件里的路径 不包含---字符串       这里是对里面的内容进行一个筛选
            if (line.lastIndexOf("---") < 0) {
                list.add(line);
            }
        }
        br.close();
        isr.close();
        fis.close();
        return list;
    }

处理图片

三、ctrl复制图片的静态方法

1.source 图片开始的路径,
2.dest 图片目的路径,
@SuppressWarnings("resource")
	public static void CopyImg(File source,File dest) {
		try {
			//读取源地址文件的字节流
			FileInputStream ins=new FileInputStream(source);
			FileOutputStream out=new FileOutputStream(dest);
			byte[] bs=new byte[1026];
			int count=0;
			while ((count=ins.read(bs,0,bs.length))!=-1) {
			//把读取到的字节流写入到目的地址的文件里面
			out.write(bs,0,count);
			
			}
 			//刷新下输出流
			out.flush();
			// 关闭输入流和输出流
			out.close();
			out.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

ctrl思路

解:zip里面包括图片和txt文件
1.定义读zip路径变量。。等
2.调动readtxt工具类返回类型List,txt信息是这样的图1按|分割
在这里插入图片描述

for (int i = 1; i < readDatalist.size(); i++) {
//	        	txt文件里的每一行数据
				String str = readDatalist.get(i);
				String[] sp = str.split("\\|");
				StuData stuData = new StuData();
				stuData.setStuName(sp[0]);
				stuData.setStuSex(sp[1]);
				stuData.setStuIdCard(sp[2]);
				stuData.setStuNature(sp[3]);
				stuData.setStuBirthday(sp[4]);
				stuData.setStuAddress(sp[5]);
				stuData.setStuPhone(sp[6]);
				stuData.setStuExamLvl(sp[7]);
				stuData.setStuLsh(sp[8]);
				stuData.setOpenId(sp[9]);
				dataList.add(stuData);
	        }

3.拼接图片路径和学生信息一起新增到数据库
在这里插入图片描述
4.复制图片?我建了一个Contract路径类,还有configimg.properties定义路径的有需要联系我

//复制s身份证照片到另一个文件夹
	        	File ywjurls = new File(Contract.RECEIVE_URL+format+"\\"+stuIdCard+Contract.RECEIVE_SELF_CONSTANT+".jpg");//源文件地址
	        	File newurls =new File(Contract.BASE_URL+Contract.SIGN_URL+stuIdCard+Contract.SELF_CONSTANT+".jpg");//目的文件地址
	        	CopyImg(ywjurls, newurls);

5.我写的是一个定时触发的接口12点38触发,加在方法上面

@Scheduled(cron = "0 38 12 * * ?") 
压缩文件方法 该方法需要引用zip4j的jar文件 单个文件、多个文件压缩 /** * 使用给定密码压缩指定文件文件夹到指定位置. * * dest可传最终压缩文件存放的绝对路径,也可以传存放目录,也可以传null或者"". * 如果传null或者""则将压缩文件存放在当前目录,即跟源文件同目录,压缩文件名取源文件名,以.zip为后缀; * 如果以路径分隔符(File.separator)结尾,则视为目录,压缩文件名取源文件名,以.zip为后缀,否则视为文件名. * @param src 要压缩的文件文件夹路径 * @param dest 压缩文件存放路径 * @param isCreateDir 是否在压缩文件里创建目录,仅在压缩文件为目录时有效. * 如果为false,将直接压缩目录下文件到压缩文件. * @param passwd 压缩使用的密码 * @return 最终的压缩文件存放的绝对路径,如果为null则说明压缩失败. */ 方法详细见文件! 可选择文件list压缩 /** * 使用给定密码压缩指定文件list * dest可传最终压缩文件存放的绝对路径,也可以传存放目录,也可以传null或者"". * 如果传null或者""则将压缩文件存放在当前目录,即跟源文件同目录,压缩文件名取源文件名,以.zip为后缀; * 如果以路径分隔符(File.separator)结尾,则视为目录,压缩文件名取源文件名,以.zip为后缀,否则视为文件名. * @param src 要压缩的文件集合 * @param dest 压缩文件存放路径 * @param isCreateDir 是否在压缩文件里创建目录,仅在压缩文件为目录时有效. * 如果为false,将直接压缩目录下文件到压缩文件. * @param passwd 压缩使用的密码 * @return 最终的压缩文件存放的绝对路径,如果为null则说明压缩失败. */ 方法详细见文件解压 /** * 使用给定密码解压指定的ZIP压缩文件到指定目录 * * 如果指定目录不存在,可以自动创建,不合法的路径将导致异常被抛出 * @param zipFile 指定的ZIP压缩文件 * @param dest 解压目录 * @param passwd ZIP文件密码 * @return 解压文件数组 * @throws ZipException 压缩文件有损坏或者解压缩失败抛出 */ 方法详细见文件! 一个简单的demo 欢迎大家指点,一起提升
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值