复制代码代码如下:
pacote com.robin;
importar java.io.File;
importar java.io.FileInputStream;
importar java.io.FileWriter;
importar java.io.IOException;
importar java.text.SimpleDateFormat;
importar java.util.Date;
importar java.util.Properties;
classe pública ArquivoCopy {
// String estática privada rootSourcePath = "D:/temp/test1/";
private static String rootSourcePath;
string estática privada rootTargetPath;
string estática privada logFilePath;
string estática privada messageStr;
public static void main(String args[]) {
// teste();
carregarConfig();
writeLogLn("Iniciar------------------------------------------");
copyDirectory(rootSourcePath, rootTargetPath);
SimpleDateFormat sdf = new SimpleDateFormat("aaaa-MM-dd_HH:mm:ss");
Data sourceFileDate = new Date();
String sourceFileDateStr = sdf.format(sourceFileDate);
writeLogLn("Hora de término:" + sourceFileDateStr + " --------------------------------------" );
writeLogLn("");
}
private static void copyFile(String sourceFileStr, String targetFileStr) {
Arquivo sourceFile = new File(sourceFileStr);
Arquivo targetFile = new Arquivo(targetFileStr);
//obtém o horário de modificação do arquivo fonte
SimpleDateFormat sdf = new SimpleDateFormat("aaaa-MM-dd_HH:mm:ss");
longo sourceFileModifiedTime = sourceFile.lastModified();
Data sourceFileDate = new Date(sourceFileModifiedTime);
String sourceFileDateStr = sdf.format(sourceFileDate);
// se o arquivo de destino existir, compare o tempo de modificação
if (targetFile.exists()) {
longo targetFileModifiedTime = targetFile.lastModified();
Data targetFileDate = new Date(targetFileModifiedTime);
String targetFileDateStr = sdf.format(targetFileDate);
if (targetFileModifiedTime >= sourceFileModifiedTime) {
messageStr = "Ignorar! SourceFileModifyTime:" + sourceFileDateStr
+ " TargetFileModifyTime:" + targetFileDateStr;
} outro {
// nioTransferCopy(sourceFile, targetFile);
systemCopy(sourceFileStr, targetFileStr);
messageStr = "Covere! SourceFileModifyTime: " + sourceFileDateStr
+ "TargetFileModifyTime: " + targetFileDateStr;
}
} outro {
// nioTransferCopy(sourceFile, targetFile);
systemCopy(sourceFileStr, targetFileStr);
messageStr = "Criar! SourceFileModifyTime: " + sourceFileDateStr;
}
messageStr += " | SouceFile: " + sourceFileStr + " | Arquivo de destino: "
+ targetFileStr;
saídaln(mensagemStr);
writeLogLn(mensagemStr);
}
private static void copyDirectory(String sourceDirectoryPath,
String targetDirectoryPath) {
//cria diretório se ele não existir
Arquivo targetDirectory = novo arquivo(targetDirectoryPath);
if (!targetDirectory.exists()) {
targetDirectory.mkdir();
messageStr = "Criar diretório: " + targetDirectoryPath;
saídaln(mensagemStr);
writeLogLn(mensagemStr);
}
//obtém todos os arquivos ou diretórios no diretório de origem
Arquivo sourceDirectory = novo arquivo(sourceDirectoryPath);
Arquivo[] arquivos = sourceDirectory.listFiles();
// percorre os arquivos de cópia
for (int i = 0; i < arquivos.comprimento; i++) {
String nome do arquivo = arquivos[i].getName();
String targetFileStr = targetDirectoryPath + nome do arquivo;
String sourceFileStr = arquivos[i].toString();
if (arquivos[i].isFile()) {
copyFile(sourceFileStr, targetFileStr);
}
if (arquivos[i].isDirectory()) {
targetFileStr = targetFileStr + "/";
copyDirectory(sourceFileStr, targetFileStr);
}
}
}
// private static void nioTransferCopy(Origem do arquivo, Destino do arquivo)
// lança IOException {
//FileChannel in = null;
//FileChannel out = null;
// FileInputStream inStream = null;
// FileOutputStream outStream = null;
// tentar {
//inStream = new FileInputStream(fonte);
//outStream = new FileOutputStream(target);
//in = inStream.getChannel();
//out = outStream.getChannel();
// in.transferTo(0, in.size(), out);
// } catch (IOException e) {
//e.printStackTrace();
// } finalmente {
//inStream.close();
//in.close();
//outStream.close();
//out.close();
// }
// }
private static void systemCopy(String sourceFileStr, String targetFileStr) {
Tempo de execução tempo de execução = Runtime.getRuntime();
sourceFileStr = sourceFileStr.replace("/", "//");
targetFileStr = targetFileStr.replace("/", "//");
tentar {
String copyCmd = "cmd /c copiar /y /"" + sourceFileStr + "/" /""
+ targetFileStr + "/"";
runtime.exec(copiarCmd);
} catch (IOException e) {
e.printStackTrace();
}
}
private static void loadConfig() {
tentar {
FileInputStream inputFile = new FileInputStream(
"config.properties");
Propriedades p = novas Propriedades();
p.load(inputArquivo);
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("CaminhoOrigem: " + rootPathOrigem);
outputln("TargetPath: " + rootTargetPath);
outputln("logFilePath: " + logFilePath);
writeLogLn("CaminhoOrigem: " + rootPathOrigem);
writeLogLn("TargetPath: " + rootTargetPath);
} catch (IOException e1) {
e1.printStackTrace();
}
}
private static void outputln(String mensagem) {
System.out.println(mensagem);
}
public static void appendWrite(Conteúdo da string) {
tentar {
Escritor FileWriter = new FileWriter(logFilePath, true);
escritor.write(conteúdo);
escritor.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void writeLogLn(String mensagem) {
anexarWrite(mensagem+"/r/n");
}
}