通过File和FileInputStream,FileOutputStream实现一个目录的复制。
但是通过调试我发现一个问题,在提供文件末地址的时候,里面的地址需要以 \\ 结尾,否则
就报异常:FileNotFoundException??
为什么呢?有大佬知道的吗?
package com.java.File;
import java.io.*;
public class Text01{
public static void main(String[] args) {
//文件源地址
File f1 = new File("D:\\java\\java01");//地址可以改变
//文件末地址
File f2 = new File("C:\\");//地址可以改变
//把源地址和末地址传进去,创建一个方法,用来拷贝目录
copyDir(f1,f2);
}
private static void copyDir(File f1, File f2) {
//判断现在指向的地址是不是一个文件,如果不是一个文件就直接拷贝。
if(!f1.isDirectory()){
//完成文件的写入
copy(f1,f2);//构建一个方法,完成文件copy
return;
}
//取出该地址的所有的下一级的地址
File[] files = f1.listFiles();
//运用了递归,遍历目录中的文件
for (File f : files) {
//如果是一个目录的话,就要去创建这个目录
if(f.isDirectory()){
//先把这个目录动态的取出来
String str = f.getAbsolutePath();//把原先的文件目录取出来
//取出来目录就要创建目录
//同时要确定末地址后面要以\结尾。
File fool = new File(f2.getAbsolutePath().endsWith("\\")?f2.getAbsolutePath()+str.substring(3):f2.getAbsolutePath()+"\\"+str.substring(3));
fool.mkdirs(); //创建目录完成
}
//递归调用,遍历每一个文件
copyDir(f, f2);
}
}
//构建方法,完成文件的拷贝
private static void copy(File f1,File f2){
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(f1);
fos = new FileOutputStream(f2.getAbsolutePath().endsWith("\\")?f2.getAbsolutePath()+f1.getAbsolutePath().substring(3):f2.getAbsolutePath()+"\\"+f1.getAbsolutePath().substring(3));
byte[] bytes = new byte[1024*1024];
int result = 0;
while((result = fis.read(bytes))!= -1){
fos.write(bytes,0,result);
}
fos.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} 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();
}
}
}
}
}