package com.sunny;
import java.io.*;
/**
* 递归地读取目录并完成目录的拷贝
*/
public class DirectoryCopyTest {
public static void main(String[] args) {
//拷贝源
File sourceFile = new File("F:\\test");
//拷贝目标
File disFile = new File("D:\\test");
if(!disFile.exists()){
System.out.println("当前目录不存在,正在新建...");
disFile.mkdir();
}
System.out.println("------目录拷贝开始!------");
//调用拷贝方法
getFiles(sourceFile,disFile);
System.out.println("------目录拷贝完成!------");
}
/**
* 拷贝目录方法
* @param sourceFile 拷贝源
* @param disFile 拷贝目标
*/
public static void getFiles(File sourceFile,File disFile){
//如果是文件则直接获取,并拷贝即可;
if(sourceFile.isFile()){
FileInputStream is = null;
FileOutputStream os = null;
try {
is = new FileInputStream(sourceFile);
os = new FileOutputStream(disFile);
//边读边写
byte[] bytes = new byte[1024*1024];//1M大小
int readCount = 0 ;
//注意,这里直接输出sourceFile其实是调用其toString方法,默认得到其完整路径
System.out.println("正在拷贝" + sourceFile);
while ((readCount = is.read(bytes)) != -1){
os.write(bytes,0, readCount);
}
os.flush();//刷新
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//如果是目录,需要先创建并递归至子文件,
}else {
File[] files = sourceFile.listFiles();
for (File file1 : files) {
//走到哪个目录就新建哪个目录
File file = new File(sourceFile+ "\\" + file1.getName());
File newDisFile = new File(disFile+ "\\" + file1.getName());
if(file.isDirectory()){
newDisFile.mkdir();
}
//递归调用
getFiles(file,newDisFile);
}
}
}
}
拷贝目录及其下所有的文件(Java递归实现)
最新推荐文章于 2024-06-06 18:30:00 发布