| 导读 | 这篇文章主要为大家详细介绍了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());
List list = 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();
}
}
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助
宫家啊