java IO流递归实现复制文件夹
使用IO流进行文件夹复制,会用到递归。
递归伪代码
/**
* 进行拷贝,递归实现
* @param f1 被拷贝文件夹或文件的File对象
* @param dirPath 拷贝到的路径,如:"H:"、"D:\\text"
*/
// 这个方法功能就是拷贝文件或文件夹
public void copy(File f1,String dirPath){
// 处理文件夹,如果传入的是一个文件夹(就会调用递归,除非里面什么都没有,,因为还要处理里面的内容)
if(f1.isDirectory()){
// 首先复制这个文件夹,在路径dirPath那创建跟这个文件夹同名的文件夹(改变dirPath路径)
// 然后获取这个文件夹下所有的文件夹和文件
// 再去一个一个copy
// copy(f,d)
// 当我把这个文件夹下的文件和文件夹都拷贝完了就结束递归
return;
}
// 处理文件,如果是一个文件,直接复制文件
if(f1.isFile()){
// IO流操作
}
}
源代码
实现类
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 文件夹或文件拷贝
* FileInputStream + FileOutputStream + File
* "C:\Users\lenovo\Desktop\test" 拷贝到 "H:"盘
*/
public class FileDirCopy_01 {
// 输入输出流
FileInputStream fis = null;
FileOutputStream fos = null;
/**
* 进行拷贝,递归实现
* @param f1 被拷贝文件夹
* @param dirPath 拷贝到的路径
*/
public void copy(File f1,String dirPath){
// 处理文件夹
if(f1.isDirectory()){
// 首先复制这个文件夹,在路径dirPath那创建跟这个文件夹同名的文件夹
// 获取f1文件夹名字
String name = f1.getName();
// 获取要创建的文件夹File对象
dirPath = dirPath + "\\" + name;// 改变dirPath路径
File f2 = new File(dirPath);
// f2创建文件夹
if(!f2.exists()){
f2.mkdir();
}
// 然后获取这个文件夹下所有的文件夹和文件
// 获取文件夹下所有File对象
File[] files = f1.listFiles();
if(files != null) {
for (File f : files) {
// 再去一个一个copy
copy(f, dirPath);
}
// 到这这个文件夹就拷贝完了
}
// 当我把这个文件夹拷贝完了就结束递归
return;
}
// 如果是一个文件,复制文件
if(f1.isFile()){
// 获取f1文件名字
String name = f1.getName();
// 创建copy后的文件File对象
File f2 = new File(dirPath + "\\" + name);
if(!f2.exists()){
try {
// 创建一个空的同名文件
f2.createNewFile();
// 创建字节输入输出流
fis = new FileInputStream(f1);
fos = new FileOutputStream(f2);
// 读取数据,写入数据
byte[] bytes = new byte[1024 * 1024];
int readCount = 0;
while((readCount = fis.read(bytes)) != -1){
fos.write(bytes,0,readCount);
}
// 输出流刷新
fos.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
// 关闭流
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
}
测试类
import java.io.File;
/**
* 测试类
*/
public class Demo {
public static void main(String[] args) {
// 创建要复制的File对象
File f1 = new File("C:\\Users\\lenovo\\Desktop\\test");
// 要复制到的路径,注意不要加"\\"
String dirPath = "H:";
FileDirCopy_01 fdc = new FileDirCopy_01();
fdc.copy(f1,dirPath);
}
}