复制代码代码如下:
пакет com.robin;
импортировать java.io.File;
импортировать java.io.FileInputStream;
импортировать java.io.FileWriter;
импортировать java.io.IOException;
импортировать java.text.SimpleDateFormat;
импортировать java.util.Date;
импортировать java.util.Properties;
общественный класс FileCopy {
// частная статическая строка rootSourcePath = "D:/temp/test1/";
частная статическая строка rootSourcePath;
частная статическая строка rootTargetPath;
частная статическая строка logFilePath;
частная статическая строка messageStr;
public static void main(String args[]) {
// тест();
загрузитьКонфиг();
writeLogLn("Начало--------------------------------------");
copyDirectory (rootSourcePath, rootTargetPath);
SimpleDateFormat sdf = new SimpleDateFormat("гггг-ММ-дд_ЧЧ:мм:сс");
Дата sourceFileDate = новая дата();
Строка sourceFileDateStr = sdf.format(sourceFileDate);
writeLogLn("Время окончания:" + sourceFileDateStr + " --------------------------------------" );
writeLogLn("");
}
Private static void copyFile(String sourceFileStr, String targetFileStr) {
Файл sourceFile = новый файл (sourceFileStr);
Файл targetFile = новый файл (targetFileStr);
// получаем время изменения исходного файла
SimpleDateFormat sdf = new SimpleDateFormat("гггг-ММ-дд_ЧЧ:мм:сс");
длинный sourceFileModifiedTime = sourceFile.lastModified();
Дата sourceFileDate = новая дата (sourceFileModifiedTime);
Строка sourceFileDateStr = sdf.format(sourceFileDate);
// если целевой файл существует, сравниваем время изменения
если (targetFile.exists()) {
длинный targetFileModifiedTime = targetFile.lastModified();
Дата targetFileDate = новая дата (targetFileModifiedTime);
Строка targetFileDateStr = sdf.format(targetFileDate);
if (targetFileModifiedTime >= sourceFileModifiedTime) {
messageStr = "Игнорировать! SourceFileModifyTime:" + sourceFileDateStr
+ " TargetFileModifyTime:" + targetFileDateStr;
} еще {
// nioTransferCopy(sourceFile, targetFile);
systemCopy(sourceFileStr, targetFileStr);
messageStr = "Covere! SourceFileModifyTime: " + sourceFileDateStr
+ "TargetFileModifyTime: " + targetFileDateStr;
}
} еще {
// nioTransferCopy(sourceFile, targetFile);
systemCopy(sourceFileStr, targetFileStr);
messageStr = "Создать! SourceFileModifyTime: " + sourceFileDateStr;
}
messageStr += " | SouceFile: " + sourceFileStr + " | Целевой файл: "
+ TargetFileStr;
выводln(messageStr);
writeLogLn(messageStr);
}
Private static void copyDirectory (String sourceDirectoryPath,
Строка targetDirectoryPath) {
// создаем каталог, если он не существует
Файл targetDirectory = новый файл (targetDirectoryPath);
если (!targetDirectory.exists()) {
targetDirectory.mkdir();
messageStr = "Создать каталог: " + targetDirectoryPath;
выводln(messageStr);
writeLogLn(messageStr);
}
// получаем все файлы или каталоги в исходном каталоге
Файл sourceDirectory = новый файл (sourceDirectoryPath);
File[] files = sourceDirectory.listFiles();
// проход по копируемым файлам
for (int i = 0; i <files.length; i++) {
Строка filename = files[i].getName();
Строка targetFileStr = targetDirectoryPath + имя файла;
Строка sourceFileStr = files[i].toString();
если (файлы[i].isFile()) {
copyFile(sourceFileStr, targetFileStr);
}
если (files[i].isDirectory()) {
targetFileStr = targetFileStr + "/";
copyDirectory(sourceFileStr, targetFileStr);
}
}
}
// частная статическая сила nioTransferCopy(Источник файла, Цель файла)
// выбрасывает IOException {
// FileChannel in = null;
// FileChannel out = null;
// FileInputStream inStream = null;
// FileOutputStream outStream = null;
// пытаться {
// inStream = новый FileInputStream(source);
// outStream = новый FileOutputStream(цель);
// in = inStream.getChannel();
// out = outStream.getChannel();
// in.transferTo(0, in.size(), out);
// } catch (IOException e) {
// e.printStackTrace();
// } окончательно {
// inStream.close();
// in.close();
// outStream.close();
// out.close();
// }
// }
Private static void systemCopy(String sourceFileStr, String targetFileStr) {
Время выполнения = Runtime.getRuntime();
sourceFileStr = sourceFileStr.replace("/", "//");
targetFileStr = targetFileStr.replace("/", "//");
пытаться {
String copyCmd = "cmd /c copy /y /"" + sourceFileStr + "/" /""
+ targetFileStr + "/"";
runtime.exec(copyCmd);
} catch (IOException e) {
е.printStackTrace();
}
}
частный статический недействительный loadConfig () {
пытаться {
FileInputStream inputFile = новый FileInputStream(
"config.properties");
Свойства p = новые свойства();
p.load(входной файл);
rootSourcePath = p.getProperty("rootSourcePath");
rootTargetPath = p.getProperty("rootTargetPath");
logFilePath = p.getProperty("logFilePath");
rootSourcePath = новая строка (rootSourcePath.getBytes («8859_1»), «GBK»);
rootTargetPath = новая строка (rootTargetPath.getBytes («8859_1»), «GBK»);
logFilePath = новая строка (logFilePath.getBytes («8859_1»), «GBK»);
outputln("SourcePath: " + rootSourcePath);
outputln("TargetPath: " + rootTargetPath);
outputln("logFilePath: " + logFilePath);
writeLogLn("SourcePath: " + rootSourcePath);
writeLogLn("TargetPath: " + rootTargetPath);
} поймать (IOException e1) {
e1.printStackTrace();
}
}
частный static void outputln(String message) {
System.out.println(сообщение);
}
public static voidappendWrite(Stringcontent) {
пытаться {
FileWriter Writer = новый FileWriter (logFilePath, true);
писатель.писать (содержание);
писатель.закрыть();
} catch (IOException e) {
е.printStackTrace();
}
}
Private static void writeLogLn(String message) {
AppendWrite(сообщение+"/r/n");
}
}