java增量同步_基于Java 的增量与完全备份小工具

这是一个Java程序,用于监测文件变化并将其备份到指定邮箱。首次运行时,程序会备份所有更改文件目录,之后则仅备份自上次备份以来发生变化的文件,并通过电子邮件发送备份报告。程序还支持定期清理旧的备份文件。
摘要由CSDN通过智能技术生成

主流程:packagecom.sean.main;importjava.io.File;importjava.io.IOException;importjava.net.URISyntaxException;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.Date;importjava.util.List;importorg.apache.commons.io.FileUtils;importorg.apache.commons.lang.StringUtils;importcom.sean.bean.EmailBean;importcom.sean.bean.FilesBean;importcom.sean.bean.PropertiesBean;importcom.sean.utils.ZipUtil;/*** change2Mail 主程序

* 检测文件修改情况并发送给指定邮箱

*@version1.0

*@authorsean

* 2015-06-09

**/

public classChange2Mail {/***@paramargs

*@throwsParseException*/

public static void main(String[] args) throwsParseException{//获取properties操作类

PropertiesBean propertiesBean = new PropertiesBean("cfg.properties");

FilesBean filesBean=newFilesBean();//邮件对象

EmailBean email=new EmailBean("cfg.properties");

String first= propertiesBean.getValue("first");//当前日期

String today=new SimpleDateFormat("yyyyMMdd").format(newDate());//邮件正文

String content="";//首次使用判断

if (first.trim().equals("true")) {

System.out.println("首次运行");

content+="欢迎首次使用change2Mail,
以下是你的更改文件备份目录
";//获取检查文件目录

String cheakDir = propertiesBean.getValue("cheakDir");if(!StringUtils.isEmpty(cheakDir)){

System.out.println("正在进行更改文件目录备份。。。。。。");//目录分割

String[] dirs = cheakDir.split(";");for (int i = 0; i < dirs.length; i++) {

File tmp=newFile(dirs[i]);

List list=filesBean.listFiles(dirs[i],true);//创建对应文件存储目录列表

File file=new File(ClassLoader.getSystemResource("").getPath()+tmp.getName());if(!file.exists()){try{

file.createNewFile();

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

System.out.println("创建目录列表记录文件失败。。。。。");return;

}

}//将列表写入文件

logFiles(file,list);//压缩文件并加入邮件

try{

ZipUtil.zipFolder(dirs[i],"tmp\\"+tmp.getName()+today+".zip");

content+=tmp.getName()+"
";

email.addFiles("tmp\\"+tmp.getName()+today+".zip");

}catch(Exception e) {

e.printStackTrace();

System.out.println("压缩出错");return;

}

}

}

content+="以下是你的固定备份目录
";

String zipDir= propertiesBean.getValue("zipDir");if(!StringUtils.isEmpty(zipDir)){

System.out.println("正在进行固定备份目录备份。。。。。。");

String[] zipDirs= zipDir.split(";");for (int i = 0; i < zipDirs.length; i++) {try{

File tmp=newFile(zipDirs[i]);

ZipUtil.zipFolder(zipDirs[i],"tmp\\"+tmp.getName()+today+"bak.zip");

content+=tmp.getName()+"
";

email.addFiles("tmp\\"+tmp.getName()+today+"bak.zip");

}catch(Exception e) {

e.printStackTrace();

System.out.println("压缩出错");return;

}

}

}

System.out.println("更新配置文件。。。。。");

propertiesBean.setValue("first", "false");

propertiesBean.setValue("lastData", today);

System.out.println("发送文件。。。。。");

email.setFrom(propertiesBean.getValue("username"));

email.setTOSend(propertiesBean.getValue("toSend"));

email.setContent(content);

email.setSubject("change2Mail备份文件"+today);if(email.send()){

System.out.println("发送成功");

}else{

System.out.println("发送失败");

}

}else{

System.out.println("备份开始。。。。。");

String data=propertiesBean.getValue("lastData");

String filter=propertiesBean.getValue("filter");

String cheakDir= propertiesBean.getValue("cheakDir");

content+="你好,自"+data+"起的文件变动如下:
";if(!StringUtils.isEmpty(cheakDir)){

System.out.println("正在进行更改文件目录备份。。。。。。");

String[] dirs= cheakDir.split(";");for (int i = 0; i < dirs.length; i++) {

File tmp=newFile(dirs[i]);

File file=new File(ClassLoader.getSystemResource("").getPath()+tmp.getName());if(!file.exists()){try{

file.createNewFile();

}catch(IOException e) {

System.out.println("创建文档失败");

e.printStackTrace();

}

}

content+="文件夹"+tmp.getName()+":
";

List list=filesBean.getModifiedFiles(dirs[i],new SimpleDateFormat("yyyyMMdd").parse(data),filter,true);

List now =filesBean.listFiles(dirs[i],filter,true);

List news=new ArrayList();

List del=new ArrayList();

List modefy=new ArrayList();

List lines=null;try{

lines=FileUtils.readLines(file);

}catch(IOException e) {

e.printStackTrace();

}

System.out.println("检查新建和修改的文件。。。。。。");for(File f:list){if(!lines.contains(f.getAbsolutePath())){

news.add(f);

}else{

modefy.add(f);

}

}

System.out.println("检查删除的文件。。。。。。");for(String f:lines){

File old=newFile(f);if(!now.contains(old)){

del.add(old);

}

}

logFiles(file,now);

content+="删除文件:
";for(File f:del){

content+=" "+f.getName()+"
";

}

content+="新增文件:
";for(File f:news){

content+=" "+f.getName()+"
";

}

content+="修改文件:
";for(File f:modefy){

content+=" "+f.getName()+"
";

}try{if(list.size()!=0){

list.add(file);

ZipUtil.zipFiles("tmp\\"+tmp.getName()+today+".zip", (ArrayList)list);

email.addFiles("tmp\\"+tmp.getName()+today+".zip");

}

}catch(Exception e) {

e.printStackTrace();

System.out.println("压缩失败");return;

}

}

String zipDir= propertiesBean.getValue("zipDir");if(!StringUtils.isEmpty(zipDir)){

System.out.println("正在进行固定备份目录备份。。。。。。");

String[] zipDirs= zipDir.split(";");for (int i = 0; i < zipDirs.length; i++) {try{

File tmp=newFile(zipDirs[i]);

ZipUtil.zipFolder(zipDirs[i],"tmp\\"+tmp.getName()+today+"bak.zip");

email.addFiles("tmp\\"+tmp.getName()+today+"bak.zip");

}catch(Exception e) {

e.printStackTrace();

System.out.println("压缩出错");return;

}

}

}

System.out.println("更改配置文件。。。。。");

propertiesBean.setValue("lastData", today);

System.out.println("发送文件。。。。。");

email.setFrom(propertiesBean.getValue("username"));

email.setTOSend(propertiesBean.getValue("toSend"));

email.setContent(content);

email.setSubject("change2Mail备份文件"+today);if(email.send()){

System.out.println("发送成功");

}else{

System.out.println("发送失败");

}

SimpleDateFormat df= new SimpleDateFormat("yyyyMMdd");long to =df.parse(today).getTime();long todel=Integer.parseInt(propertiesBean.getValue("time"))*(1000 * 60 * 60 * 24);

Date lastBak=new Date(to-todel) ;

System.out.println("删除"+df.format(lastBak)+"之前保存的历史文件。。。。。");

List fileToDel=filesBean.getOlderFiles("tmp\\", lastBak,true);for(File f:fileToDel){try{

FileUtils.deleteQuietly(f);

}catch(Exception e) {//TODO: handle exception

e.printStackTrace();

System.out.println("删除"+f.getName()+"文件失败");

}

}

System.out.println(newDate());

}

}

}/*** 将文件列表的绝对地址输出到一个文件中

*@paramfile 输出文件

*@paramlist 文件列表

*@return成功返回true,失败返回false*/

public static boolean logFiles(File file, Listlist) {

List lines=new ArrayList();try{for(File f : list) {

lines.add(f.getAbsolutePath());

}

FileUtils.writeLines(file, lines,false);return true;

}catch(IOException e) {

e.printStackTrace();return false;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值