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<File> list = new ArrayList<File>();

        getAllFile(file,list);

        backUp(list,dest);
    }

    //备份
    private static void backUp(List<File> 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<File> 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();
    }
   }
  }
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 通过java备份恢复mysql数据库的实现代码

    复制代码 代码如下: import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java

  • Java实现定时备份文件

    本文实例为大家分享了Java如何定时备份文件的具体实现代码,供大家参考,具体内容如下 程序思路: 1.空目录不备份,但非空目录都备份 2.源目录 source 要递归他下面所有的文件和目录 存入List 3.循环这个list,创建每个文件的目录 4.开始复制 以下代码实现了定时备份路径为e:\\a的文件,每30秒进行一次备份,时间可修改. public class Test12 { public static void main(String[] args) throws Interrupted

  • java Timer 定时每天凌晨1点执行任务

    下面给大家介绍java Timer 定时每天凌晨1点执行任务,具体代码如下所示: import java.util.TimerTask; /** * 执行内容 * @author admin_Hzw * */ public class Task extends TimerTask { public void run() { System.out.println("我有一头小毛驴!"); } } import java.util.Calendar; import java.util.Da

  • Java任务定时执行器案例的实现

    目录 ️前面的话️ 1.定时器概述 1.1认识定时器 1.2Timer类的使用 2.定时器的简单实现 ️前面的话️ 本篇文章将介绍Java多线程案例,定时器,定时器就像闹钟一样,等到了指定的时间,闹钟就会发出响声来提醒您,而定时器会执行指定的任务. 1.定时器概述 1.1认识定时器 java中的定时器,也可以叫做任务定时执行器,顾名思义,就是等到了指定的时间,就去做指定的事情,就像你每周六或周日都要去力扣参加周赛一样. 所以你如果想要使用定时器,你需要交代时间和对应的任务才行,java标准也提供

  • java 实现定时的方法及实例代码

    java 定时任务 在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现.下面LZ就其原理.实例以及Timer缺陷三个方面来解析Java Timer定时器. 一.简介 在Java中一个完整定时任务需要由Timer.TimerTask两个类来配合完成. API中是这样定义他们的,Timer:一种工具,线程用其安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行.由TimerTask:Timer 安排为一次执行或重复执行

  • 备份文件并上传至FTP服务器的bat代码

    定时备份文件并FTP上传至备份服务器 复制代码 代码如下: @echo offcolor 0ftitle 定时备份文件并FTP上传至备份服务器 rem 要备份的文件夹echo:set /p bak_webFile=        请将要上传的文件(夹)拖到此处= rem 当前日期(格式YYYYMMDD)set bak_date=%date:~0,4%%date:~5,2%%date:~8,2% rem ftp信息set bak_ftpServer=202.96.189.52set bak_ftp

  • JAVA中 Spring定时器的两种实现方式

    目前有两种流行Spring定时器配置:Java的Timer类和OpenSymphony的Quartz. 1.Java Timer定时 首先继承java.util.TimerTask类实现run方法 import java.util.TimerTask; public class EmailReportTask extends TimerTask{ @Override public void run() { ... } } 在Spring定义 ... 配置Spring定时器 <bean id=&quo

  • java 直接调用python脚本,并传递参数代码实例

    最近陆续用python写了很多文件处理脚本,虽然功能都比较简单 ,但还是感觉到python对文件处理的简洁高效 ,越发觉得java的语法相当的繁琐~ 接到个需求处理ftp数据接口 .所以想把python脚本也用上.java代码定时扫描ftp数据仓库 ,调用python脚本入库. 直接采用java执行系统命令的方式 @Async public void readFileByPython(List<String> filePaths) throws FileNotFoundException {

  • 使用java实现“钉钉微应用免登进入某H5系统首页“功能”

    一.前言 哈哈,这是我的第一篇博客. 先说一下这个小功能的具体场景: 用户登录钉钉app,点击微应用,获取当前用户的信息,与H5系统的数据库的用户信息对比,如果存在该用户,则点击后直接进入H5系统的首页,否则显示"您无权限". 补充:又加了一个小需求,就是免登成功,会给该用户发条消息 我是参考钉钉开发文档实现的这个小功能,文档地址:https://ding-doc.dingtalk.com/doc#/serverapi2/clotub 二.准备工作 需要创建一个微应用:https://

  • 使用java代码实现一个月内不再提醒,通用到期的问题

    其实就是最常见的到期问题. 例如帐号到期,会员到期等. 字段可以命名为: expire_date 或 valid_date 场景 所在的家电公司要做个不再提醒功能. 其实就是有效期问题,开工. 过程 数据库设计 字段: id user_account 用户帐号 create_date 创建时间 update_date 更新时间 expire_date 过期时间 时间类型用设置么?例如一个月,一年. 其实不用,这个参数前端传即可,在逻辑里面转换为expire_date即可. 设置过期时间 推荐使用

  • SpringBoot整合Xxl-job实现定时任务的全过程

    目录 前言 一.部署调度中心 1.项目下载 2.初始化数据 3.修改properties配置文件 二.部署SpringBoot项目 1.引入依赖 2.创建配置类 3.修改配置文件 4.创建执行器 5.启动SpringBoot项目 三.通过调度中心进行任务调度 1.添加执行器 2.添加任务 3.任务调度中心发起任务调度 四.小结 总结 前言 ​ XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源代码并接入多家公司线上产品线,开箱即用. 如果是单机

随机推荐