定时任务,解压本地带密码的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 * * ?")