代码
/*
拷贝目录:
将D:\course拷贝到C盘根下....
需要使用到:
FileInputStream
FileOutputStream
File
可能需要使用到递归。你尝试实现一下!
*/
import java.io.*;
public class Homework1 {
public static void main(String[] args) {
File src = new File("D:\\java\\javaProjects\\02-javaSE");
File des = new File("C:\\javaSE");
DirCopy(src, des);
}
public static void DirCopy(File src, File des){
//判断是否为文件夹
if (src.isDirectory()){//是文件夹的话
if (!des.exists()){//目标文件夹不存在
//新建文件夹
des.mkdir();
}
//源文件夹子目录下文件名
String[] files = src.list();
for (String childFile : files){
//创建源子文件对象
File ScrChildFile = new File(src, childFile);
//创建目标子文件对象
File DesChildFile = new File(des, childFile);
DirCopy(ScrChildFile, DesChildFile);
}
}else{//为文件则直接拷贝
fileCopy(src.toString(), des.toString());
}
}
/**
* 文件拷贝
* @param src 源文件绝对路径
* @param des 目标文件绝对路径
*/
public static void fileCopy(String src, String des){
FileInputStream fis = null;
FileOutputStream fos = null;
try {
//读文件
fis = new FileInputStream(src);
//写文件
fos = new FileOutputStream(des);
byte[] bytes = new byte[1024*1024]; //1M
int length = 0;
while ((length = fis.read(bytes)) != -1){
fos.write(bytes, 0, length);
}
//flush
fos.flush();//catch 细粒度
} catch (FileNotFoundException exception) {
exception.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭流
//分别try,防止剩下流无法关闭
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}