public class CopyAll {
public static void main(String[] args) {
//拷贝源
File srcFile = new File("G:\\shortcut\\学习资料\\java");
//拷贝目标
File destFile = new File("C:\\Users\\along\\Desktop\\888");
//调用方法拷贝
copyDir(srcFile,destFile);
}
private static void copyDir(File srcFile, File destFile) {
if (srcFile.isFile()){
//srcFile 是一个文件的话,文件需要拷贝
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
try {
fileInputStream = new FileInputStream(srcFile);//写到文件中
String path = (
destFile.getAbsolutePath().endsWith("\\") ?
destFile.getAbsolutePath() : destFile.getAbsolutePath() + "\\"
) + srcFile.getAbsolutePath().substring(17);
fileOutputStream = new FileOutputStream(path);
int readCount = 0;
byte[] bytes = new byte[1024*1024];//一次复制1M
while ((readCount = fileInputStream.read(bytes)) != -1){
fileOutputStream.write(bytes,0,readCount);
}
fileOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (fileInputStream != null){
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileOutputStream != null){
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 递归结束
return;
}
//获取源下面的子目录,可能是文件,也可能是目录
File[] files = srcFile.listFiles();
for (File file:files) {
//获取文件的(包括文件和目录)绝对路径
//System.out.println(file.getAbsolutePath());
if (file.isDirectory()){
//新建目录
String srcDir = file.getAbsolutePath();
//System.out.println(srcDir.substring(16));
String destDir = (
destFile.getAbsolutePath().endsWith("\\") ?
destFile.getAbsolutePath() : destFile.getAbsolutePath() + "\\"
) + srcDir.substring(17);
File newFile = new File(destDir);
if (!newFile.exists()){
//多重目录创建
newFile.mkdirs();
}
}
//递归调用
copyDir(file,destFile);
}
}
}