文件复制工具

作者:源码世界时间:2014-03-13分类:程序员碎语评论:0浏览:5747
package com.robin;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

public class FileCopy {
	// private static String rootSourcePath = "D:/temp/test1/";
	private static String rootSourcePath;
	private static String rootTargetPath;
	private static String logFilePath;
	private static String messageStr;

	public static void main(String args[]) {
		// test();		
		loadConfig();
		writeLogLn("Start--------------------------------------");
		copyDirectory(rootSourcePath, rootTargetPath);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
		Date sourceFileDate = new Date();
		String sourceFileDateStr = sdf.format(sourceFileDate);		
		writeLogLn("End Time:" + sourceFileDateStr + " --------------------------------------");
		writeLogLn("");
		
	}


	private static void copyFile(String sourceFileStr, String targetFileStr) {
		File sourceFile = new File(sourceFileStr);
		File targetFile = new File(targetFileStr);

		// get source file modify time
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
		long sourceFileModifiedTime = sourceFile.lastModified();
		Date sourceFileDate = new Date(sourceFileModifiedTime);
		String sourceFileDateStr = sdf.format(sourceFileDate);

		// if target file exist, compare modify time
		if (targetFile.exists()) {
			long targetFileModifiedTime = targetFile.lastModified();
			Date targetFileDate = new Date(targetFileModifiedTime);
			String targetFileDateStr = sdf.format(targetFileDate);

			if (targetFileModifiedTime >= sourceFileModifiedTime) {
				messageStr = "Ignore! SourceFileModifyTime:" + sourceFileDateStr
						+ " TargetFileModifyTime:" + targetFileDateStr;				
			} else {
				// nioTransferCopy(sourceFile, targetFile);
				systemCopy(sourceFileStr, targetFileStr);
				messageStr = "Covere! SourceFileModifyTime: " + sourceFileDateStr
						+ "TargetFileModifyTime: " + targetFileDateStr;
			}
		} else {
			// nioTransferCopy(sourceFile, targetFile);
			systemCopy(sourceFileStr, targetFileStr);
			messageStr = "Create! SourceFileModifyTime: " + sourceFileDateStr;
		}
		messageStr += " | SouceFile: " + sourceFileStr + " | Target File: "
				+ targetFileStr;
		outputln(messageStr);
		writeLogLn(messageStr);
	}

	private static void copyDirectory(String sourceDirectoryPath,
			String targetDirectoryPath) {
		// create directory if it was not exist
		File targetDirectory = new File(targetDirectoryPath);
		if (!targetDirectory.exists()) {
			targetDirectory.mkdir();
			messageStr = "Make Directory: " + targetDirectoryPath;
			outputln(messageStr);
			writeLogLn(messageStr);
		}
		// get all files or directories on source directory
		File sourceDirectory = new File(sourceDirectoryPath);
		File[] files = sourceDirectory.listFiles();
		// traverse copy files
		for (int i = 0; i < files.length; i++) {
			String filename = files[i].getName();
			String targetFileStr = targetDirectoryPath + filename;
			String sourceFileStr = files[i].toString();
			if (files[i].isFile()) {
				copyFile(sourceFileStr, targetFileStr);
			}
			if (files[i].isDirectory()) {
				targetFileStr = targetFileStr + "/";
				copyDirectory(sourceFileStr, targetFileStr);
			}
		}
	}

	// private static void nioTransferCopy(File source, File target)
	// throws IOException {
	// FileChannel in = null;
	// FileChannel out = null;
	// FileInputStream inStream = null;
	// FileOutputStream outStream = null;
	// try {
	// inStream = new FileInputStream(source);
	// outStream = new FileOutputStream(target);
	// in = inStream.getChannel();
	// out = outStream.getChannel();
	// in.transferTo(0, in.size(), out);
	// } catch (IOException e) {
	// e.printStackTrace();
	// } finally {
	// inStream.close();
	// in.close();
	// outStream.close();
	// out.close();
	// }
	// }

	private static void systemCopy(String sourceFileStr, String targetFileStr) {
		Runtime runtime = Runtime.getRuntime();
		sourceFileStr = sourceFileStr.replace("/", "\\");
		targetFileStr = targetFileStr.replace("/", "\\");
		try {
			String copyCmd = "cmd /c copy /y \"" + sourceFileStr + "\" \""
					+ targetFileStr + "\"";
			runtime.exec(copyCmd);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private static void loadConfig() {

		try {
			FileInputStream inputFile = new FileInputStream(
					"config.properties");
			Properties p = new Properties();
			p.load(inputFile);
			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("SourcePath: " + rootSourcePath);
			outputln("TargetPath: " + rootTargetPath);
			outputln("logFilePath: " + logFilePath);
			writeLogLn("SourcePath: " + rootSourcePath);
			writeLogLn("TargetPath: " + rootTargetPath);
		} catch (IOException e1) {
			e1.printStackTrace();
		}
	}

	private static void outputln(String message) {
		System.out.println(message);
	}
	
	public static void appendWrite(String content) {
        try {
            FileWriter writer = new FileWriter(logFilePath, true);
            writer.write(content);
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }		
	
	private static void writeLogLn(String message) {
		appendWrite(message+"\r\n");
	}

}
标签:Java  
返回顶部
分享按钮