package com.bjpowernode.javase.day27.IO;
import java.io.*;
public class CopyAll {
public static void main(String[] args) {
//拷贝源
File srcFile=new File("D:\\javaSE\\Test");
//拷贝目标
File desFile=new File("D:\\javaSE\\Test02");
//调用方法拷贝
copyDir(srcFile,desFile);
}
private static void copyDir(File srcFile,File desFile) {
if(srcFile.isFile()){
/*如果srcFile是一个文件的话,递归结束*/
//是文件的时候需要拷贝
//....一边读一边写
FileInputStream in=null;
FileOutputStream out=null;
try {
in=new FileInputStream(srcFile);
out=new FileOutputStream( (desFile.getAbsolutePath().endsWith("\\")? desFile.getAbsolutePath():desFile.getAbsolutePath()+"\\")+srcFile.getAbsolutePath().substring(10));
//一边读一边写
byte[] bytes=new byte[2];//一次复制2字节
int readCount=0;
while ((readCount=in.read(bytes))!=-1)
{
out.write(bytes,0,readCount);
}
out.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (in!=null){
try {
in.close();
}catch (IOException e){
e.printStackTrace();
}
}
if(out!=null){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return;
}
//获取源下面的子目录
File[] files=srcFile.listFiles();
for(File file:files){
//获取所有文件的(包括目录和文件)的绝对路径
/*System.out.println(file.getAbsolutePath());*/
if(file.isDirectory()){
//新建对应的目录
/*System.out.println(file.getAbsolutePath());*/
/*D:\javaSE\Test*/ //源目录
/*D:\javaSE\Test02*/ //目标目录
String strDir=file.getAbsolutePath();
/*System.out.println(strDir.substring(10));*/
String desDir= (desFile.getAbsolutePath().endsWith("\\")? desFile.getAbsolutePath():desFile.getAbsolutePath()+"\\")+strDir.substring(10);
System.out.println(desDir);
File newFile=new File(desDir);
if(!newFile.exists()){
newFile.mkdirs();//如果计划目录不存在,我们就需要创建
}
}
//递归调用
copyDir(file,desFile);
}
}
}
涉及到字符串的拼接,递归的使用
字符串拼接的时候要注意java会将“\\”看做“\”,那么一个“/”就会被看成转义字符,导致路径字符串拼接失败,这个时候应该使用三目运算符给它加上一个斜杠。












