复制番号代番号次のように:
パッケージcom.robin;
java.io.ファイルをインポートします。
java.io.FileInputStreamをインポートします。
java.io.FileWriterをインポートします。
インポート java.io.IOException;
インポート java.text.SimpleDateFormat;
java.util.Dateをインポートします。
java.util.Propertiesをインポートします。
パブリック クラス FileCopy {
// プライベート静的 String rootSourcePath = "D:/temp/test1/";
プライベート静的文字列 rootSourcePath;
プライベート静的文字列 rootTargetPath;
プライベート静的文字列ログファイルパス;
プライベート静的文字列 messageStr;
public static void main(String args[]) {
// テスト();
loadConfig();
writeLogLn("開始--------------------------------------");
copyDirectory(rootSourcePath, rootTargetPath);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
日付sourceFileDate = new Date();
文字列sourceFileDateStr = sdf.format(sourceFileDate);
writeLogLn("終了時刻:" + sourceFileDateStr + " --------------------------------------" );
writeLogLn("");
}
private static void copyFile(String sourceFileStr, String targetFileStr) {
ファイルsourceFile = 新しいファイル(sourceFileStr);
ファイル targetFile = 新しい File(targetFileStr);
// ソースファイルの変更時刻を取得
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
長いsourceFileModifiedTime =sourceFile.lastModified();
日付sourceFileDate = 新しい日付(sourceFileModifiedTime);
文字列sourceFileDateStr = sdf.format(sourceFileDate);
// 対象ファイルが存在する場合、変更時間を比較
if (targetFile.exists()) {
long targetFileModifiedTime = targetFile.lastModified();
日付 targetFileDate = 新しい日付(targetFileModifiedTime);
文字列 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 += " | SourceFile: " + sourceFileStr + " | ターゲット ファイル: "
+ targetFileStr;
出力ln(メッセージ文字列);
writeLogLn(メッセージ文字列);
}
private static void copyDirectory(String sourceDirectoryPath,
文字列 targetDirectoryPath) {
// ディレクトリが存在しない場合は作成します
ファイル targetDirectory = 新しいファイル(targetDirectoryPath);
if (!targetDirectory.exists()) {
targetDirectory.mkdir();
messageStr = "ディレクトリの作成: " + targetDirectoryPath;
出力ln(メッセージ文字列);
writeLogLn(メッセージ文字列);
}
// ソースディレクトリ上のすべてのファイルまたはディレクトリを取得します
ファイルsourceDirectory = 新しいファイル(sourceDirectoryPath);
File[] ファイル = sourceDirectory.listFiles();
// コピーファイルを走査する
for (int i = 0; i < files.length; i++) {
文字列ファイル名 = files[i].getName();
文字列 targetFileStr = targetDirectoryPath + ファイル名;
文字列sourceFileStr = files[i].toString();
if (files[i].isFile()) {
copyFile(sourceFileStr, targetFileStr);
}
if (files[i].isDirectory()) {
targetFileStr = targetFileStr + "/";
copyDirectory(sourceFileStr, targetFileStr);
}
}
}
// private static void nioTransferCopy(ファイルソース, ファイルターゲット)
// IOException をスローする {
// ファイルチャネル in = null;
// ファイルチャネル出力 = 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 = Runtime.getRuntime();
sourceFileStr = sourceFileStr.replace("/", "//");
targetFileStr = targetFileStr.replace("/", "//");
試す {
String copyCmd = "cmd /c copy /y /"" + sourceFileStr + "/" /""
+ targetFileStr + "/"";
runtime.exec(copyCmd);
} キャッチ (IOException e) {
e.printStackTrace();
}
}
プライベート静的 void loadConfig() {
試す {
FileInputStream inputFile = new FileInputStream(
"config.properties");
プロパティ 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);
Outputln("ログファイルパス: " + ログファイルパス);
writeLogLn("ソースパス: " + rootSourcePath);
writeLogLn("ターゲットパス: " + rootTargetPath);
} キャッチ (IOException e1) {
e1.printStackTrace();
}
}
private static void Outputln(String message) {
System.out.println(メッセージ);
}
public static void appendWrite(String content) {
試す {
FileWriter ライター = new FileWriter(logFilePath, true);
Writer.write(コンテンツ);
Writer.close();
} キャッチ (IOException e) {
e.printStackTrace();
}
}
private static void writeLogLn(String message) {
appendWrite(メッセージ+"/r/n");
}
}