java_IO_复制多级文件夹

需求:将"D:\Demo"路径下的所有文件复制到"E:\Demo"路径下。

思路

A:封装数据源

B:封装目的地,创建目的地路径

C:读取源路径所有文件并依次进行判断是否问文件夹

         是:在指定路径创建该文件夹

         否:创建输入流,输出流对象,按照一个一次读取一个字节数组的方式在指定路径复制该文件

package cn.lzw_06;

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 CopyMultiDirDemo {
	public static void main(String[] args) throws IOException {
		// 封装数据源 File= "D:\\Demo"
		File srcFile = new File("D:\\Demo");

		// 封装目的地,创建目的地文件夹
		File destFile = new File("E:\\Demo");
		destFile.mkdir();
		//实现赋值文件和文件夹的功能
		copyFile(srcFile,destFile);
	}

	private static void copyFile(File srcFile,File destFile) throws IOException {
		// 获取目标文件夹中的所有目标文件的File对象
		File[] fs = srcFile.listFiles();
		// 增强For遍历数组,复制数组中的File对象
		for (File ff : fs) {
			if (ff.isDirectory()) {//判断该File对象是否为文件夹
				File newFile = new File(destFile,ff.getName());
				newFile.mkdir();// 如果是文件夹,在指定路径下创建此文件夹对象
				copyFile(ff,newFile);//利用递归继续调用此方法,只有是文件才执行赋值操作
			} else {
				// 封装输入源(字节流)
				BufferedInputStream bis = new BufferedInputStream(
						new FileInputStream(ff));
				// 封装目的地
				BufferedOutputStream bos = new BufferedOutputStream(
						new FileOutputStream(new File(destFile,ff.getName())));
				// 一次读取一个字节数组
				int len = 0;
				byte[] by = new byte[1024];
				while ((len = bis.read(by)) != -1) {
					bos.write(by, 0, len);//写入
					bos.flush();//刷新
				}
				// 释放资源
				bis.close();
				bos.close();
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/Will_Zhan/article/details/81225463