複製程式碼如下:
包 com.robin;
導入java.io.File;
導入 java.io.FileInputStream;
導入 java.io.FileWriter;
導入java.io.IOException;
導入 java.text.SimpleDateFormat;
導入 java.util.Date;
導入java.util.Properties;
公共類別文件複製{
// private static String rootSourcePath = "D:/temp/test1/";
私人靜態字符串rootSourcePath;
私人靜態字符串rootTargetPath;
私有靜態字串日誌檔案路徑;
私人靜態字符串訊息Str;
公共靜態無效主(字串參數[]){
// 測試();
載入配置();
writeLogLn("開始--------------------------------------");
複製目錄(rootSourcePath,rootTargetPath);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
日期來源檔案日期 = new Date();
字串 sourceFileDateStr = sdf.format(sourceFileDate);
writeLogLn("結束時間:" + sourceFileDateStr + " --------------------------------------" );
writeLogLn("");
}
私有靜態無效copyFile(字串sourceFileStr,字串targetFileStr){
文件 sourceFile = new File(sourceFileStr);
檔案 targetFile = new File(targetFileStr);
// 取得原始檔修改時間
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
長 sourceFileModifiedTime = sourceFile.lastModified();
日期 sourceFileDate = new Date(sourceFileModifiedTime);
String sourceFileDateStr = sdf.format(sourceFileDate);
// 如果目標檔案存在,則比較修改時間
if (targetFile.exists()) {
長 targetFileModifiedTime = targetFile.lastModified();
日期 targetFileDate = new Date(targetFileModifiedTime);
字串 targetFileDateStr = sdf.format(targetFileDate);
if (目標檔案修改時間 >= 原始檔修改時間) {
messageStr = "忽略!SourceFileModifyTime:" + sourceFileDateStr
+ " TargetFileModifyTime:" + targetFileDateStr;
} 別的 {
// nioTransferCopy(原始檔, 目標檔);
systemCopy(sourceFileStr, targetFileStr);
messageStr = "覆蓋!SourceFileModifyTime: " + sourceFileDateStr
+ "TargetFileModifyTime:" + targetFileDateStr;
}
} 別的 {
// nioTransferCopy(原始檔, 目標檔);
systemCopy(sourceFileStr, targetFileStr);
messageStr = "建立!SourceFileModifyTime:" + sourceFileDateStr;
}
messageStr += " | SouceFile: " + sourceFileStr + " | 目標檔: "
+ 目標文件Str;
輸出(messageStr);
writeLogLn(messageStr);
}
私有靜態無效copyDirectory(字串sourceDirectoryPath,
字串目標目錄路徑) {
// 如果目錄不存在則建立
文件目標目錄=新文件(目標目錄路徑);
if (!targetDirectory.exists()) {
targetDirectory.mkdir();
messageStr = "建立目錄:" + targetDirectoryPath;
輸出(messageStr);
writeLogLn(messageStr);
}
// 取得來源目錄下的所有檔案或目錄
文件來源目錄 = new File(sourceDirectoryPath);
File[] files = sourceDirectory.listFiles();
// 遍歷複製文件
for (int i = 0; i < 檔案長度; i++) {
字串檔名 = files[i].getName();
String targetFileStr = targetDirectoryPath + 檔名;
String sourceFileStr = files[i].toString();
if (files[i].isFile()) {
複製文件(來源文件Str,目標文件Str);
}
if (files[i].isDirectory()) {
目標檔案Str = 目標檔案Str + "/";
複製目錄(sourceFileStr, targetFileStr);
}
}
}
// private static void nioTransferCopy(檔案來源,檔案目標)
// 拋出 IOException {
// 檔案頻道 in = null;
// 檔案通道輸出 = null;
// 檔案輸入流 inStream = null;
// 檔案輸出流 outStream = null;
// 嘗試 {
// inStream = new FileInputStream(來源);
// outStream = new FileOutputStream(目標);
// in = inStream.getChannel();
// 輸出 = outStream.getChannel();
// in.transferTo(0, in.size(), out);
// } catch (IOException e) {
// e.printStackTrace();
// } 最後 {
// inStream.close();
// in.close();
// outStream.close();
// out.close();
// }
// }
私有靜態無效systemCopy(字串sourceFileStr,字串targetFileStr){
運行時運行時間 = Runtime.getRuntime();
sourceFileStr = sourceFileStr.replace("/", "//");
targetFileStr = targetFileStr.replace("/", "//");
嘗試 {
String copyCmd = "cmd /c copy /y /"" + sourceFileStr + "/" /""
+ targetFileStr + "/"";
運行時.exec(copyCmd);
} catch (IOException e) {
e.printStackTrace();
}
}
私有靜態無效loadConfig(){
嘗試 {
文件輸入流 輸入檔 = 新的文件輸入流(
“配置.屬性”);
屬性 p = new Properties();
p.load(輸入檔);
rootSourcePath = p.getProperty("rootSourcePath");
rootTargetPath = p.getProperty("rootTargetPath");
logFilePath = p.getProperty("logFilePath");
rootSourcePath = new String(rootSourcePath.getBytes("8859_1"), "GBK");
rootTargetPath = new String(rootTargetPath.getBytes("8859_1"), "GBK");
logFilePath = new String(logFilePath.getBytes("8859_1"), "GBK");
outputln("來源路徑:" + rootSourcePath);
outputln("目標路徑:" + rootTargetPath);
輸出(“日誌檔案路徑:” + 日誌檔案路徑);
writeLogLn("來源路徑:" + rootSourcePath);
writeLogLn("目標路徑:" + rootTargetPath);
} catch (IOException e1) {
e1.printStackTrace();
}
}
私有靜態無效outputln(字串訊息){
System.out.println(訊息);
}
公共靜態無效appendWrite(字串內容){
嘗試 {
FileWriter writer = new FileWriter(logFilePath, true);
writer.write(內容);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
私有靜態無效writeLogLn(字串訊息){
追加寫入(訊息+“/r/n”);
}
}