import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;


public class DirCopy {
	
	public static void Process(String Nguon, String Dich) throws IOException{
	
	File TepTin = new File(Nguon);
	int Amount;
	byte[] Mang = new byte[1024];
	
	if (TepTin.isFile()){
		BufferedInputStream Nguonx = new BufferedInputStream(new FileInputStream(Nguon));
		BufferedOutputStream Dichx = new BufferedOutputStream(new FileOutputStream(Dich));
		
		System.out.println("Đang Copy...");
		long TimeA = System.currentTimeMillis();
	
		while((Amount = Nguonx.read(Mang)) != -1){
			Dichx.write(Mang, 0, Amount);
		}
		
		long TimeZ = System.currentTimeMillis();
		Nguonx.close();
		Dichx.close();
		
		System.out.println("Copy thành công. Mất " + (TimeZ - TimeA) + " ms");
	
		} else {
			
		System.out.println("Đang Copy...");
		long TimeA = System.currentTimeMillis();
			
		Copying(Nguon, Dich);
	
		long TimeZ = System.currentTimeMillis();
		System.out.println("Copy thành công. Mất " + (TimeZ - TimeA) + " ms");
}
}
	public static void Copying(String Nguon, String Dich) throws IOException{
		
		File TepTin = new File(Nguon);
		int Amount;
		byte[] Mang = new byte[1024];
		
		if (TepTin.isFile()){
			BufferedInputStream Nguonx = new BufferedInputStream(new FileInputStream(Nguon));
			BufferedOutputStream Dichx = new BufferedOutputStream(new FileOutputStream(Dich));
			
			while((Amount = Nguonx.read(Mang)) != -1){
				Dichx.write(Mang, 0, Amount);
			}
			
			Nguonx.close();
			Dichx.close();
			
		} else	{
			
			File nDir = new File(Dich);
			nDir.mkdirs();
			File[] NoiDung = TepTin.listFiles();
			
		for (int i = 0; i < NoiDung.length; i++){ 
			Copying(NoiDung[i].getAbsolutePath(), Dich + "\\" + NoiDung[i].getName());
	 }			
		}
	}
public static void main(String[] args) throws IOException {
	
	String Nguon = "D:\\test";
	String Dich  = "D:\\BK";
	Process(Nguon, Dich);
	
}


}