复代码代码如下:
패키지 com.robin;
java.io.파일 가져오기;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
java.util.Date 가져오기;
java.util.Properties 가져오기;
공개 클래스 FileCopy {
// private static String rootSourcePath = "D:/temp/test1/";
개인 정적 문자열 rootSourcePath;
개인 정적 문자열 rootTargetPath;
개인 정적 문자열 logFilePath;
개인 정적 문자열 messageStr;
공개 정적 무효 메인(문자열 인수[]) {
// 시험();
로드구성();
writeLogLn("시작-------------------------");
copyDirectory(rootSourcePath, rootTargetPath);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
날짜 sourceFileDate = new Date();
문자열 sourceFileDateStr = sdf.format(sourceFileDate);
writeLogLn("종료 시간:" + sourceFileDateStr + " -------------------------" );
writeLogLn("");
}
개인 정적 무효 copyFile(문자열 sourceFileStr, 문자열 targetFileStr) {
파일 sourceFile = 새 파일(sourceFileStr);
파일 targetFile = 새 파일(targetFileStr);
// 소스 파일 수정 시간을 가져옵니다.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
긴 sourceFileModifiedTime = sourceFile.lastModified();
날짜 sourceFileDate = new Date(sourceFileModifiedTime);
문자열 sourceFileDateStr = sdf.format(sourceFileDate);
// 대상 파일이 존재하면 수정 시간을 비교합니다.
if (targetFile.exists()) {
긴 targetFileModifiedTime = targetFile.lastModified();
날짜 targetFileDate = new Date(targetFileModifiedTime);
String targetFileDateStr = sdf.format(targetFileDate);
if (targetFileModifiedTime >= sourceFileModifiedTime) {
messageStr = "무시하세요! SourceFileModifyTime:" + sourceFileDateStr
+ "TargetFileModifyTime:" + targetFileDateStr;
} 또 다른 {
// nioTransferCopy(sourceFile, targetFile);
systemCopy(sourceFileStr, targetFileStr);
messageStr = "커버! SourceFileModifyTime: " + sourceFileDateStr
+ "TargetFileModifyTime: " + targetFileDateStr;
}
} 또 다른 {
// nioTransferCopy(sourceFile, targetFile);
systemCopy(sourceFileStr, targetFileStr);
messageStr = "만들기! SourceFileModifyTime: " + sourceFileDateStr;
}
messageStr += " | SouceFile: " + sourceFileStr + " | 대상 파일: "
+ 타겟파일Str;
outputln(messageStr);
writeLogLn(messageStr);
}
개인 정적 무효 copyDirectory(문자열 sourceDirectoryPath,
문자열 targetDirectoryPath) {
//디렉토리가 없으면 생성
파일 targetDirectory = 새 파일(targetDirectoryPath);
if (!targetDirectory.exists()) {
targetDirectory.mkdir();
messageStr = "디렉토리 만들기: " + targetDirectoryPath;
outputln(messageStr);
writeLogLn(messageStr);
}
// 소스 디렉터리의 모든 파일이나 디렉터리를 가져옵니다.
파일 sourceDirectory = 새 파일(sourceDirectoryPath);
파일[] 파일 = sourceDirectory.listFiles();
// 복사 파일 탐색
for (int i = 0; i < files.length; i++) {
문자열 파일명 = 파일[i].getName();
문자열 targetFileStr = targetDirectoryPath + 파일 이름;
문자열 sourceFileStr = 파일[i].toString();
if (파일[i].isFile()) {
copyFile(sourceFileStr, targetFileStr);
}
if (files[i].isDirectory()) {
targetFileStr = targetFileStr + "/";
copyDirectory(sourceFileStr, targetFileStr);
}
}
}
// private static void nioTransferCopy(파일 소스, 파일 대상)
// IOException 발생 {
// FileChannel in = null;
// 파일채널 출력 = null;
// FileInputStream inStream = null;
// FileOutputStream outStream = null;
// 노력하다 {
// inStream = new FileInputStream(소스);
// outStream = new FileOutputStream(대상);
// in = inStream.getChannel();
// 아웃 = outStream.getChannel();
// in.transferTo(0, in.size(), out);
// } 잡기 (IOException e) {
// e.printStackTrace();
// } 마지막으로 {
// inStream.close();
// in.close();
// outStream.close();
// 아웃.닫기();
// }
// }
개인 정적 무효 systemCopy(String sourceFileStr, String targetFileStr) {
런타임 런타임 = Runtime.getRuntime();
sourceFileStr = sourceFileStr.replace("/", "//");
targetFileStr = targetFileStr.replace("/", "//");
노력하다 {
문자열 copyCmd = "cmd /c 복사 /y /"" + sourceFileStr + "/" /""
+ targetFileStr + "/"";
런타임.exec(copyCmd);
} 잡기(IOException e) {
e.printStackTrace();
}
}
개인 정적 무효 loadConfig() {
노력하다 {
FileInputStream inputFile = 새로운 FileInputStream(
"config.properties");
속성 p = 새 속성();
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);
outputln("logFilePath: " + logFilePath);
writeLogLn("소스 경로: " + rootSourcePath);
writeLogLn("대상 경로: " + rootTargetPath);
} 잡기(IOException e1) {
e1.printStackTrace();
}
}
개인 정적 무효 출력ln(문자열 메시지) {
System.out.println(메시지);
}
공개 정적 무효 appWrite(문자열 콘텐츠) {
노력하다 {
FileWriter 작가 = new FileWriter(logFilePath, true);
작가.쓰기(내용);
작가.닫기();
} 잡기(IOException e) {
e.printStackTrace();
}
}
개인 정적 무효 writeLogLn(문자열 메시지) {
AppendWrite(메시지+"/r/n");
}
}