Java实现文件夹的复制

Java复制当个文件很简答,我们直接通过io操作即可。但复制一个文件夹时就不同了。最主要的难点在于不知道文件的结构。

实现思路:

1.遍历目标文件下的所有子文件和目录。

2.遍历所有子文件判断是目录还是文件,如果是目录的话先创建该目录,然后再递归进入该目录遍历,反之则复制文件。

经过测试复制10G的内容大约要9分钟的样子,进一步改进的话则考虑缓冲流,减少写入的操作。

package test02;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 文件复制
 * @author lanbing
 * @date 2018年8月29日
 *
 */
public class DirClone {
	
	//源路径
	public static String sourse = "C:\\Users\\Administrator\\Desktop\\中软每日一讲";
	//目标路径
	public static String target = "C:\\Users\\Administrator\\Desktop\\js2";

	/**
	 * 主函数
	 * @param args
	 */
	public static void main(String[] args) {
		long startTime = System.currentTimeMillis();
		Clone(sourse);
		long endTime = System.currentTimeMillis();
		System.out.println("总共用时:"+(endTime-startTime));
	}

	/**
	 * 遍历文件夹并复制
	 * @param sourse
	 * @param target
	 */
	public static void Clone(String url){
		//获取目录下所有文件
		File f = new File(url);
		File[] allf = f.listFiles();
		
		//遍历所有文件
		for(File fi:allf) {
			try {
				//拼接目标位置
				String URL = target+fi.getAbsolutePath().substring(sourse.length());

				//创建目录或文件
				if(fi.isDirectory()) {
					Createflies(URL);
				}else {
					fileInputOutput(fi.getAbsolutePath(),URL);
				}

				//递归调用
				if(fi.isDirectory()) {
					Clone(fi.getAbsolutePath());
				}

			}catch (Exception e) {
				System.out.println("error");
			}
		}
	}

	/**
	 * 复制文件
	 * @param sourse
	 * @param target
	 */
	public static void fileInputOutput(String sourse,String target) {
		try {
			File s = new File(sourse);
			File t = new File(target);
			
			FileInputStream fin = new FileInputStream(s);
			FileOutputStream fout = new FileOutputStream(t);

			byte[] a = new byte[1024*1024*4];	
			int b = -1;
			
			//边读边写
			while((b = fin.read(a))!=-1) {
				fout.write(a,0,b);
			}

			fout.close();
			fin.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 创建目录
	 * @param name
	 * @return
	 */
	public static boolean Createflies(String name) {
		boolean flag=false;
		File file=new File(name);
		//创建目录
		if(file.mkdir() == true){
			System.out.println("文件夹创建成功!");
			flag=true;
		}else {
			System.out.println("文件夹创建失败!");
			flag=false;
			
		}
		
		return flag;
	}
}



猜你喜欢

转载自blog.csdn.net/qq_34042417/article/details/82777380
今日推荐