java复制文件的四种步骤

java复制文件的四种方法
package com.tij.io.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.channels.FileChannel;

import javax.naming.ldap.SortControl;

import org.apache.commons.io.FileUtils;

/**
 * java复杂文件的四种方法
 * @author guoyoujun
 * @date 2014-3-17
 */
public class JavaCopyFile {

	/**
	 * java复杂文件的四种方法
	 * <p>1、传统方法:使用流
	 * <p>2、java.nio.channels.FileChannel
	 * <p>3、Apache Commons IO FileUtils.copyFile()
	 * <p>4、java7 copy()
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		File source = new File("/Users/GYJ/funshion/update/popwind.json");
        File dest = new File("/Users/GYJ/a.json");
        copyFileUsingStream(source, dest);
        copyFileUsingChannel(source, dest);
        copyFileUsingApacheCommonsIO(source, dest);
        copyFileUsingJava7Files(source, dest);
	}
	
	/**
	 * 使用流来复制文件
	 * @param source
	 * @param dest
	 * @throws IOException 
	 */
	private static void copyFileUsingStream(File source, File dest) throws IOException {
		InputStream is = null;
		OutputStream os = null;
		try {
			is = new FileInputStream(source);
			os = new FileOutputStream(dest);
			byte[] buffer = new byte[1024];
			int length;
			while ((length = is.read(buffer)) > 0) {
				os.write(buffer, 0, length);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} finally {
			is.close();
			os.close();
		}
	}
	
	/**
	 * 使用java.nio.channels.FileChannel
	 * @param source
	 * @param dest
	 * @throws IOException 
	 */
	private static void copyFileUsingChannel(File source, File dest) throws IOException {
		FileChannel sourceChannel = null;
		FileChannel destChannel = null;
		try {
			sourceChannel = new FileInputStream(source).getChannel();
			destChannel = new FileOutputStream(dest).getChannel();
			destChannel.transferFrom(sourceChannel, 0, sourceChannel.size());
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} finally {
			sourceChannel.close();
			destChannel.close();
		}
	}
	
	
	/**
	 * 使用ApacheCommonsIO(需要commons-io-2.0.1.jar)
	 * @param source
	 * @param dest
	 * @throws IOException 
	 */
	private static void copyFileUsingApacheCommonsIO(File source, File dest) throws IOException {
		// org.apache.commons.io.FileUtils
		FileUtils.copyFile(source, dest);
	}
	
	/**
	 * java7中的方法
	 * @param source
	 * @param dest
	 */
	private static void copyFileUsingJava7Files(File source, File dest) {
		//java7中可以使用Files类的copy()方法
		//Files.copy(source.toPath(), dest.toPath());
	}

}