你这代码飘红能运行起来吗
package com.inputoutputsteam;
// 导包 才能当前java文件调用
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
// 需求:拷贝一个文件夹所有内容到另一个文件夹
/*
* 准备一个要拷贝的文件或者文件夹还有一个拷贝的目的地文件或者文件夹
* 判断是文件还是文件夹
* 是文件夹,新建一个名字一样的文件夹到目的地
* 然后遍历文件夹
* 是文件夹,新建一个名字一样的文件夹
* 然后在调用自身方法(递归)...
* 是文件,拷贝到目的地当前目录下
* 是文件,则直接拷贝到当前目录下
*/
public class CopyDirectoryDemo {
public static void main(String[] args) throws Exception {
File aFile = new File("D:\\test");// 拷贝的目标文件夹
File cFile = new File("D:\\testBackup");// 拷贝的目的地
copyDirectory(aFile, cFile);// 调用拷贝文件夹的方法实现(面向对象思想)
}
// 拷贝文件夹的方法
public static void copyDirectory(File a, File c) throws Exception {// 抛出异常
File mFile = c;// 创建一个文件对象,方便后续使用
File[] alist;// 新建一个文件数组,方便后续直接初始化
if (a.isDirectory()) {// 判断目标文件是否是文件夹
c.mkdir();// 新建一个目的地文件夹用于后续的的文件夹和文件的存放
alist = a.listFiles();// 对目标文件进行文件数组初始化
for (File as : alist) {// 利用foreach遍历文件数组
if (as.isDirectory()) {// 判断是否文件夹
// 创建指针指向要操作的文件 文件地址为当前文件父目录的路径加上双斜杠表示一个斜杠(因为java中\具有转义功能)+ 当前遍历的文件的文件名
mFile = new File(c.getAbsoluteFile() + "\\" + as.getName());
mFile.mkdir();// 新建一个文件夹
// 然后递归当前的拷贝文件夹方法 传入当前的需要拷贝的文件夹和新建好的目的地文件夹(保证同步拷贝)
copyDirectory(as, mFile);
} else {// 不是则调用拷贝文件方法进行拷贝
copyFile(as, mFile);// 调用拷贝文件方法传入当前的文件参数
}
}
} else {// 是文件 则调用拷贝文件的方法进行拷贝
copyFile(a, c);
}
}
// 拷贝文件的方法
public static void copyFile(File a, File c) throws Exception {// 抛出异常
// 创建一个文件字节输入流
FileInputStream fis = new FileInputStream(a);
// 创建一个文件字节输出流到目的地文件 文件名为当前的目的地文件的绝对路径 + 目标文件的文件名
FileOutputStream fos = new FileOutputStream(new File(c.getAbsoluteFile() + "\\" + a.getName()));
byte[] bytes = new byte[8192]; // 使用字节数组拷贝
int len = 0;// 定义变量用于接收输入流读取一个数据字节
while ((len = fis.read(bytes)) != -1) {// 循环读入,len为-1表示文件已经读取完毕
fos.write(bytes, 0, len);// 用字节数组输出流循环写入数据(注意:要拷贝的是每次获取的字节数组的长度)
fos.flush();// 刷新保证数据写入到文件中
}
fis.close();// 关闭此文件输入流并释放与此流有关的所有系统资源
fos.close();// 关闭此文件输出流并释放与此流有关的所有系统资源
}
}