增量更新項目時的備份

在增量更新項目時,作好備份十分重要,這裏提供一個方法備份所更新的文件。java

把更新包放在指定目錄,配好以下webappFolder、updateFolder已經bakeupFolder的路徑。web

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 xxapp

這時程序會從舊有項目拷貝一份和更新包相同的文件到bakeupFolder目錄。webapp

最後,咱們就能夠大膽的把更新包在項目中覆蓋老文件了。測試

相關文章
相關標籤/搜索