使用I/O流实现目录的拷贝
实现方法
1、创建两个方法,在一个 FileEach(File dir,File copyadd)方法中去递归遍历传入的dir目录,如果当前为目录,则在copyadd的基础上创建此文件夹。
if (dir.isDirectory()){
File newfile = new File(copyadd, dir.getName());
newfile.mkdir();
2、再去循环遍历此文件夹,如果遍历得到的file是文件那么就调用dirCopy(String source,File copyadd)去实现文件的拷贝;若为文件夹则递归
File[] files = dir.listFiles();
if (files.length>0){
for(File file:files){
if (file.isFile()){
dirCopy(file.getAbsolutePath(),new File(newfile,file.getName()));
}else{
FileEach(file,newfile);
}
}
}
整体代码
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* Author K U N 2021/1/11
*/
public class T2 {
/**
* 文件复制
* @param source
* @param copyadd
* @throws IOException
*/
public static void dirCopy(String source,File copyadd) throws IOException {
try(
FileInputStream fis = new FileInputStream(source);
FileOutputStream fos = new FileOutputStream(copyadd);
){
int len;
byte[] b = new byte[1024];
while ((len = fis.read(b))!=-1){
fos.write(b,0,len);
}
}
}
/**
* 递归遍历目标目录
* 若当前为目录,创建一个新的mul
* 若当前为文件,则调用I\O方法
* @param dir
* @param copyadd
* @throws IOException
*/
public static void FileEach(File dir,File copyadd) throws IOException {
if (dir.isDirectory()){
File newfile = new File(copyadd, dir.getName());
newfile.mkdir();
File[] files = dir.listFiles();
if (files.length>0){
for(File file:files){
if (file.isFile()){
dirCopy(file.getAbsolutePath(),new File(newfile,file.getName()));
}else{
FileEach(file,newfile);
}
}
}
}
}
public static void main(String[] args) throws IOException {
//创建两个目录的实例。
File dir = new File("C:\\MyJava_File");
File copyadd = new File("C:\\Users\\K U N\\Desktop");
FileEach(dir,copyadd);
}
}