增量更新项目时的备份

在增量更新项目时,做好备份十分重要,这里提供一个方法备份所更新的文件。

把更新包放在指定目录,配好如下webappFolder、updateFolder已经bakeupFolder的路径。

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;
 
public class MyBak
{
  private static StringBuffer globalTxtMessage = new StringBuffer("");
  private static StringBuffer stdoutMessage = new StringBuffer("");
  private static int totalFileNumber = 0;
  private static int totalSuccessCopyNumber = 0;
  private static int totalNewFileNumber = 0;
 
  public static void main(String[] args)
  {
    String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
 
    String webappFolder = "/www/htdocs/webapps/M4";
 
    String updateFolder = "/home/whaty/bakeForUpdate/update/" + today;
 
    String backupFolder = "/home/whaty/bakeForUpdate/bake/" + today;
 
    if (webappFolder.equals(backupFolder)) {
      stdoutMessage.append("you can't just copy thins to the webapps folder!\n");
      globalTxtMessage = new StringBuffer("");
      stdoutMessage = new StringBuffer("");
    } else {
      String msg = backupFiles(updateFolder, webappFolder, backupFolder);
      System.out.print(msg);
      globalTxtMessage = new StringBuffer("");
      stdoutMessage = new StringBuffer("");
    }
  }
 
  public static String backupFiles(String _updateFolder, String _webappFolder, String _backupFolder)
  {
    String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
    String now = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
    try {
      File updateFolder = new File(_updateFolder);
      File webappFolder = new File(_webappFolder);
      File backupFolder = new File(_backupFolder);
 
      globalTxtMessage.append("============" + now + "Backup Log==========\n");
      globalTxtMessage.append("============初始化条件测试开始===============\n");
      stdoutMessage.append("============init test start===============\n");
 
      if (!(updateFolder.exists())) {
        globalTxtMessage.append(_updateFolder + "更新包文件夹找不到!\n");
        stdoutMessage.append(" the upload folder \"" + _updateFolder + "\" can Not found! \n please make sure you have upload the folder!!!!\n");
      }
      if (!(webappFolder.exists())) {
        globalTxtMessage.append("项目Webapp文件夹" + _webappFolder + "找不到!\n");
        stdoutMessage.append("the Webapp folder " + _webappFolder + " can Not found!!!\n please make sure the folder is exists!!!!\n");
        return stdoutMessage.toString();
      }
      if (!(backupFolder.exists())) {
        globalTxtMessage.append("自动创建备份文件夹" + backupFolder.getAbsolutePath() + "\n");
        stdoutMessage.append("auto create folder " + backupFolder.getAbsolutePath() + "\n");
        backupFolder.mkdirs();
      }
      globalTxtMessage.append("============初始化条件测试结束===============\n");
      stdoutMessage.append("============init  test end===============\n");
 
      Long start = Long.valueOf(System.currentTimeMillis());
 
      copyFilesToDirectory(updateFolder, webappFolder, backupFolder);
 
      Long end = Long.valueOf(System.currentTimeMillis());
 
      Long oprationMillisTime = Long.valueOf(end.longValue() - start.longValue());
      Long oprationSecondTime = Long.valueOf((end.longValue() - start.longValue()) / 1000L);
 
      globalTxtMessage.append("备份完成!\n");
      globalTxtMessage.append("=========================================\n");
      globalTxtMessage.append("总文件数:" + totalFileNumber + "\n");
      globalTxtMessage.append("成功复制:" + totalSuccessCopyNumber + "\n");
      globalTxtMessage.append("新增文件数:" + totalNewFileNumber + "\n");
      globalTxtMessage.append("拷贝文件所需时间[oprationMillisTime]:" + oprationMillisTime + " 毫秒\n");
      globalTxtMessage.append("拷贝文件所需时间[oprationSecondTime]:" + oprationSecondTime + " 秒\n");
 
      stdoutMessage.append("backup done!\n");
      stdoutMessage.append("total files number:" + totalFileNumber + "\n");
      stdoutMessage.append("success copies number:" + totalSuccessCopyNumber + "\n");
      stdoutMessage.append("new files number:" + totalNewFileNumber + "\n");
      stdoutMessage.append("copy files time[oprationMillisTime]:" + oprationMillisTime + " MillisTime...\n");
      stdoutMessage.append("copy files time[oprationSecondTime]:" + oprationSecondTime + " sencends...\n");
      stdoutMessage.append("check more info in this file:" + _backupFolder + "/" + today + "_bak" + "/backupLog.txt\n");
	  File logFile=new File(_backupFolder + "/backupLog.txt");
	  logFile.createNewFile();
      FileWriter fw = new FileWriter(logFile);
      BufferedWriter bw = new BufferedWriter(fw);
      bw.write(globalTxtMessage.toString());
      bw.flush();
      bw.close();
    }
    catch (Exception e)
    {
      globalTxtMessage.append("============The main function Exception...==============\n");
      e.printStackTrace();
    }
    return stdoutMessage.toString();
  }
 
  public static void copyFilesToDirectory(File _updateFolder, File _webappFolder, File _backupFolder) {
    String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
    try {
      if (!(_updateFolder.isDirectory())) {
        File srcFile = new File(_webappFolder.getAbsolutePath() + _updateFolder.getPath().split(today)[1]);
        System.out.println(_webappFolder.getAbsolutePath() + _updateFolder.getPath().split(today)[1]);
        totalFileNumber += 1;
        if (!(srcFile.exists())) {
          totalNewFileNumber += 1;
          globalTxtMessage.append("文件:" + srcFile.getPath() + " 在原webapp文件文件夹中不存在,请确认这是个新添加的文件 \n"); return;
        }
        File destFile = new File(_backupFolder.getAbsolutePath() + _updateFolder.getPath().split(today)[1]);
        copyFile(srcFile.getAbsolutePath(), destFile.getAbsolutePath());
        totalSuccessCopyNumber += 1; return;
      }
 
      File[] files = _updateFolder.listFiles();
      for (int i = 0; i < files.length; ++i)
      {
        copyFilesToDirectory(files[i], _webappFolder, _backupFolder);
      }
    }
    catch (Exception e) {
      globalTxtMessage.append("复制文件出错! \n");
      e.printStackTrace();
    }
  }
 
  public static void copyFile(String oldPath, String newPath)
  {
    int bytesum = 0;
    int byteread = 0;
    File oldfile = new File(oldPath);
    File newfile = new File(newPath);
 
    if (!(newfile.getParentFile().exists())) {
      newfile.getParentFile().mkdirs();
    }
 
    if (oldfile.exists()) {
      InputStream inStream = null;
      FileOutputStream fs = null;
      try {
        inStream = new FileInputStream(oldPath);
        fs = new FileOutputStream(newPath);
 
        byte[] buffer = new byte[1444];
        while ((byteread = inStream.read(buffer)) != -1) {
          bytesum += byteread;
          fs.write(buffer, 0, byteread);
        }
      }catch (FileNotFoundException e) {
        globalTxtMessage.append("复制文件:" + oldfile.getName() + " 时找不到文件! \n");
        e.printStackTrace();
      }catch (IOException e){
        globalTxtMessage.append("复制文件:" + oldfile.getName() + " 时出错! \n");
        e.printStackTrace();
      } finally {
        try {
          if (inStream != null)
            inStream.close();
 
          if (fs != null)
            fs.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
      globalTxtMessage.append("文件复制成功:" + oldfile.getAbsolutePath() + "(size:" + (bytesum / 1024.0D) + "KB)\n");
 
      Long oldFileLastModifiedTime = Long.valueOf(oldfile.lastModified());
      newfile.setLastModified(oldFileLastModifiedTime.longValue());
    } else {
      globalTxtMessage.append("文件:" + oldfile.getAbsolutePath() + " 找不到!\n");
    }
  }
}

运行javac xx.java,java xx

这时程序会从旧有项目拷贝一份和更新包相同的文件到bakeupFolder目录。

最后,我们就可以大胆的把更新包在项目中覆盖老文件了。

转载于:https://my.oschina.net/u/2339729/blog/466574

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值