首先我们要实现的是将一个目录及他的子目录还有目录中含有的文件拷贝到另一个目录下,目标目录中的文件及其目录要和源目录保持一致。
我们可以先梳理下思路,第一步我们先将源目录和目标目录创建出来,然后通过调用copy方法进行实现,具体实现方法我们在copy方法中进行是实现。
在copy中需要传递源目录及目标目录。
copy方法中的具体思路如下:
首先我们先获取源目录中的所有子文件,使用listFiles()方法,在得到源目录的所有子目录后,我们使用一个FILE数组进行接收,然后进行遍历,在遍历时如果遍历的是一个目录,那么递归调用copy方法,如果是一个文件那么return返回。并且在进行遍历时如果发现对象是一个目录需要进行对创建目标目录,而目标目录需要进行拼接生成。
具体的源码如下:
import java.io.*;
public class DirCopyTest {
public static void main(String[] args) {
File src=new File(“D:\java笔记\B站java学习笔记”);
File des =new File(“E:\”);
copy(src,des);
}
private static void copy(File src, File des) {
//如果是文件那么递归结束copy调用,将文件进行复制操作
if(src.isFile())
{
FileInputStream fis =null;//输入流
FileOutputStream fos=null;//输出流
try {
fis=new FileInputStream(src);//获取源路径
String path=des.getAbsolutePath()+src.getAbsolutePath().substring(3);//获取目标路径
fos=new FileOutputStream(path);//将目标路径传入
int k=0;
//边读边写。
byte [] b=new byte[1024*1024];
while ((k= fis.read(b))!=-1)
{
fos.write(b,0,k);
}
fos.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return;
}
File []file =src.listFiles();//获取src下的所有子目录
for (File f :file)//对File【】数组进行遍历
{
if(f.isDirectory())
{
String srcc= f.getAbsolutePath();//源目录
String dess=des.getAbsolutePath()+srcc.substring(3);//目标目录
System.out.println(dess);
File newFile=new File(dess);//将目标目录路径生成
if(!newFile.exists())//如果目标目录路径不存在进行创建。
{
newFile.mkdirs();
}
}
//System.out.println(f.getAbsolutePath());
copy(f,des);//如果是目录进行递归带调用copy
}
}
}