一、进行拷贝的前期工作
1、面向对象化
准备拷贝源、拷贝目标以及拷贝的方法。
2、实现拷贝的方法
第一步:运用方法递归获取源目录下的所有子目录,进行判断,如果是文件,方法结束。
// 获取源下面的子目录
File[] files = srcFile.listFiles();
通过递归,获取所有文件
copyDir(file,destFile);
第二步:获取所有文件的(包括目录和文件)的绝对路径,进行对目标目录的多级创建。
例如:
D:\Users\cwy\Desktop\JAVA\Java项目 -----> 源目录
E:\a\b\c\d\Users\cwy\Desktop\JAVA\Java项目 -------> 目标目录
获取源目录路径:
String srcDir = file.getAbsolutePath();
需要进行对源目录路径的截取:
String destDir = "E:\\a\\b\\c\\d\\" + srcDir.substring(3);
为了保证路径的动态变化:
String d = destFile.getAbsolutePath();
String destDir = (d.endsWith("\\") ? d : d + "\\") + srcDir.substring(3);
创建多级目录:
File newFile = new File(destDir);
// 创建多级目录
if (!newFile.exists()) {
newFile.mkdirs();
}
注意:
1、在创建多级目录的时候电脑中不能存在与源目录相同的起始文件名,否则会创建不成功。
2、在使用进行字符串拼接路径操作的时候,需要动态路径。如果是在电脑某个盘的根目录下,不会出现路径出错的情况,如果不是在跟目录下,就会出错。
第三步:如果源目录是是一个文件,就进行文件的拷贝,一边读一边写,在创建FileOutputStream对象的时候,需要传入截取的源目录路径和在电脑某个盘下的路径。
String path = (destFile.getAbsolutePath().endsWith("\\") ? destFile.getAbsolutePath() : destFile.getAbsolutePath() + "\\") + srcFile.getAbsolutePath().substring(3);
FileOutputStream fileOutputStream = new FileOutputStream(path);
二、实现拷贝
byte[] bytes = new byte[1024 * 1024];
int readCount = 0;
while((readCount = fileInputStream.read(bytes)) != -1){
fileOutputStream.write(bytes,0,readCount);
}