Java实现定时备份文件

网友投稿 252 2022-10-03


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("对应的新路径" + nehttp://wpath);

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 list) {

if (source.isDirectory()) {

//查看子目录 listFile()

File[] fs = source.listFiles();

if (fs != null && fs.length > 0) {

//说明有子目录或子文件

for (File ff : fs) {

getAllFile(ff, listhttp://);

http:// }

}

}

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();

}

}

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:网络安全领域,有哪些主要的就业方向?
下一篇:GRE和 GRE over IPsec VPN(gre和雅思哪个难度大)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~