复制代码代码如下:
包 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();
String 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”);
}
}