导读 | 这篇文章主要为大家详细介绍了Java实现定时备份文件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 |
本文实例为大家分享了Java如何定时备份文件的具体实现代码,供大家参考,具体内容如下
程序思路:
1.空目录不备份,但非空目录都备份
2.源目录 source 要递归他下面所有的文件和目录 存入List
3.循环这个list,创建每个文件的目录
4.开始复制
以下代码实现了定时备份路径为e:\\a的文件,每30秒进行一次备份,时间可修改。
public class Test12 { public static void main(String[] args) throws InterruptedException { Timer t = new Timer(); t.scheduleAtFixedRate(new MyTask(),new Date(),1000*30); for(int i = 0;i<10000;i++){ Thread.sleep(1000); System.out.println("warning"); } } } class MyTask extends TimerTask{ static final String SOURCE = "e:\\a"; static String DEST; @Override public void run() { Date d = new Date(); DateFormat df = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss"); DEST = "e:\\dest_" + df.format(d); File file = new File(SOURCE); File dest = new File(DEST); if(dest.exists()){ deleteAll(dest); } System.out.println("创建备份目录?"+dest.mkdirs()); Listlist = new ArrayList (); getAllFile(file,list); backUp(list,dest); } //备份 private static void backUp(List list, File dest) { if (list == null || list.size() <= 0)="" {="" return;="" }="" for="" (file="" f="" :="" list)="" {="" string="" fpath="f.getAbsolutePath();" 取出绝对路径="" e:\\a="" string="" newpath="fpath.replace(SOURCE," dest);="" system.out.println("对应的新路径"="" +="" newpath);="" file="" newfile="new" file(newpath);="" if="" (newfile.getparentfile().exists()="=" false)="" {="" system.out.println("创建"="" +="" newfile="" +="" "的父目录成功?"="" +="" newfile.getparentfile().mkdirs());="" }="" if="" (f.isfile())="" {="" copy(f,="" newfile);="" }="" }="" }="" 复制="" private="" static="" void="" copy(file="" infile,="" file="" outfile)="" {="" fileinputstream="" fis="null;" fileoutputstream="" fos="null;" boolean="" isflag="false;" try="" {="" fis="new" fileinputstream(infile);="" fos="new" fileoutputstream(outfile);="" byte[]="" bs="new" byte[1024];="" int="" length="-1;" while="" ((length="fis.read(bs))" !="-1)" {="" fos.write(bs,="" 0,="" length);="" }="" fos.flush();="" }="" catch="" (exception="" e)="" {="" e.printstacktrace();="" }="" finally="" {="" if="" (fos="" !="null)" {="" try="" {="" fos.close();="" }="" catch="" (ioexception="" e)="" {="" e.printstacktrace();="" }="" }="" if="" (fis="" !="null)" {="" try="" {="" fis.close();="" }="" catch="" (ioexception="" e)="" {="" e.printstacktrace();="" }="" }="" }="" }="" 递归获取原目录下所有的文件信息="" private="" static="" void="" getallfile(file="" source,="">=> list) { if (source.isDirectory()) { //查看子目录 listFile() File[] fs = source.listFiles(); if (fs != null && fs.length > 0) { //说明有子目录或子文件 for (File ff : fs) { getAllFile(ff, list); } } } list.add(source); } //递归删除 private static void deleteAll(File f) { if (f.isDirectory()) { File[] fs = f.listFiles(); if (fs != null && fs.length > 0) { for (File file : fs) { deleteAll(file); } } } System.out.println(f + "删除成功?" + f.delete()); } }
再为大家补充一段:
import java.util.Calendar; import java.util.Date; import java.text.SimpleDateFormat; import java.io.IOException; import java.io.PrintStream; public class Backup { public static void main(String[] args) { Runtime runtime = Runtime.getRuntime(); Calendar calendar = Calendar.getInstance(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss"); String currentTime = dateFormat.format(calendar.getTime()); Process p = null; PrintStream print = null; StringBuilder buf = new StringBuilder(); for(String a : args){ buf.append(a); buf.append(" "); } String databases = buf.toString(); try{ p = runtime.exec("cmd /c mysqldump -uroot -p1234 -B "+databases+">"+currentTime+".sql.bak"); }catch (IOException e){ if( p != null ){ p.destroy(); } try{ print = new PrintStream(currentTime+"_backup_err.log"); dateFormat.applyPattern("yyyy-MM-dd HH:mm:ss"); currentTime = dateFormat.format(calendar.getTime()); print.println(currentTime+" backup failed."); e.printStackTrace(print); print.flush(); }catch (IOException e2){ }finally{ if(print!=null){ print.close(); } } } } }
以上就是本文的全部内容,希望对大家的学习有所帮助