Java中IO流对文件夹进行复制
文件的复制就是IO流中的读写过程,其实文件夹的复制也是读写的过程,但是在读写的时候我们要加以判断,如果是一个文件夹的话就遍历其中的文件,是一个重复的迭代过程
思路分析:
图片可能理解起来不是特别的清晰,看一下代码吧
import java.io.*;
public class Text_文件夹的复制 {
public static void main(String[] args) throws Exception {
System.out.println("开始复制文件夹");
//首先建立输入输出的File对象
File f = new File("D:\\www\\");
File f2 = new File("D:\\ww");
copyDir(f,f2); //调用复制文件夹的方法
System.out.println("文件夹复制成功!");
}
public static void copyDir(File srcDir,File desDir) throws Exception{
//判断文件夹是否存在,避免出现空指针异常
if(srcDir != null && srcDir.length() > 0) {
//创建目的文件夹,一旦进入这一步就表明源文件夹没有问题,所以要创建目的文件夹来进行复制
desDir.mkdirs();
//提取文件夹一级对象
File[] file = srcDir.listFiles();
//遍历文件夹
for(File fi : file) {
//判断是否为文件
if(fi.isFile()) { //如果是一个文件则直接进行复制
/*
简单说一下这里的逻辑:
是一个文件夹就可以直接复制,那么复制的文件源就是此时遍历的得到的File,目的文件就是此时当前文件夹+File.getName();
直接调用文件复制的方法
*/
copyFile(fi,new File(desDir,fi.getName())); //可以查看一下File类的构造方法
}
else {
//如果不是文件,肯定是一个目录。使用迭代
/*
遍历逻辑:迭代!
*/
copyDir(fi,new File(desDir,fi.getName()));
}
}
}
}
//定义一个复制文件的方法
public static void copyFile(File srcFile , File desFile) throws Exception {
//使用字节缓冲流进行文件复制
try(
BufferedInputStream buff1 = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream buff2 = new BufferedOutputStream(new FileOutputStream(desFile));
){
byte[] bytes = new byte[1024];
int len;
while((len = buff1.read(bytes)) != -1) {
buff2.write(bytes, 0, len);
}
}catch(Exception e) {
System.out.println("复制文件出现错误!");
}
}
}
其中逻辑就主要在于出现目录时,进行的迭代过程