拷贝目录
在学了io流之后的练习,但是一上手就懵了没有思路在看了讲解之后算是做了出来,
import java.io.*;
public class CopyTest03 {
public static void main(String[] args) {
//复制文件的目录
File f = new File("G:\\Spring");
//要复制的位置
File c = new File("F:\\");
//调用复制方法
copyAll(f, c);
}
private static void copyAll(File f, File c) {
if (f.isFile()){//f获取到的如果是一个文件则递归结束
//复制文件
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(f);//读取文件
//复制文件路径
String path = (c.getAbsolutePath().endsWith("\\") ? c.getAbsolutePath() :c.getAbsolutePath() +"\\")+ f.getAbsolutePath().substring(3);
//读出文件
fos = new FileOutputStream(path);
//创建一个一次读取10MB的数组
byte[] bytes = new byte[1024*1024*10];
int data = 0;
//如果读取不到文件时返回-1,循环结束
while ((data = fis.read(bytes))!=-1){
//读取数据
fos.write(bytes,0,data);
}
//刷新
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();
}
}
}
return;
}
//获取文件的目录
File[] files = f.listFiles();
// System.out.println(files);
for (File file : files) {
//System.out.println(file.getAbsolutePath());
//获取所有的目录和目录下的文件
if (file.isDirectory()){//如果是一个目录则拿出所有的目录
// System.out.println(file);
//创建新的目录
String src = file.getAbsolutePath();
//复制目录的地址
String drc = (c.getAbsolutePath().endsWith("\\") ? c.getAbsolutePath() :c.getAbsolutePath() +"\\")+src.substring(3);
//System.out.println(drc);//输出路径
File newFile = new File(drc);
//判断文件是否存在如果不存在创建
if (!newFile.exists()){
newFile.mkdirs();
}
}
copyAll(file,c);//递归,当读取的路径是文件时,递归结束,如果不是文件,则继续调用
}
}
}