多级文件夹复制

多级文件夹复制


思路:

使用递归算法

使用字节流读入写出 


代码如下: 

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;

public class FolderCopy {
	public static void main(String[] args) {
		//给出要被复制的文件夹的绝对路径
		File dir = new File("F:/apache_jar包/apache-tomcat-7.0.77");
		//给出复制到的文件夹
		File target = new File("E:/");
		FolderCopy.copyDir(dir, target);
	}
	/**
	 * 递归方法
	 * @param srcDir 要被复制的文件夹
	 * @param targetDir 被复制的文件夹 复制到的地方
	 */
	public static void copyDir(File srcDir , File targetDir){
		String dirName = srcDir.getName();
		File dirNew = new File(targetDir, dirName);//E:/apache-tomcat-7.0.77
		if (!dirNew.exists()) {
			dirNew.mkdir();
		}
		File[] files = srcDir.listFiles();//F:/apache_jar包/apache-tomcat-7.0.77/第一级别的所有子文件和子文件夹
		for (File file : files) {
			if (file.isDirectory()) {
				copyDir(file, dirNew);//递归
			}else{
				//流的读取和写出
				copyFile(file,dirNew);
			}
		}
	}
	/**
	 * 使用字节流读入写出
	 * @param file 要复制的文件
	 * @param dirNew 要复制到的文件夹
	 */
	private static void copyFile(File file, File dirNew) {
		try (InputStream is = new FileInputStream(file);
				OutputStream os = new FileOutputStream(new File(dirNew, file.getName()));){
			byte[] bs = new byte[1024*4];
			int len = -1;
			while((len = is.read(bs))!=-1){
				os.write(bs, 0, len);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
}

猜你喜欢

转载自blog.csdn.net/qq_41547057/article/details/99006460