用Java代码编写一个实现拷贝文件夹的功能
思路:
1、先在目的路径创建一个与要被拷贝文件夹名相同名字的文件夹
2、将原文件夹中的所有成员(包括子文件夹以及文件)遍历一遍,并同时判断每一个成员是否为文件;是文件则复制文件到指定的目的路径中;如不是,则此成员为子文件夹,就重新进行思路2,此处运用递归思想;
思路补充:
我门先将复制文件的代码写出封装成一个函数,本文命名为copy( ) ,再创建一个拷贝所有文件的函数,本文命名为copyPlus( );在copyPlus( )函数中第一步先将原文件夹中的所有成员(包括子文件夹以及文件)遍历一遍,并同时判断每一个成员是否为文件;是文件则调用copy( )函数复制文件到指定的目的路径中;如不是,则此成员为子文件夹,就重新执行copyPuls( )函数,此处运用递归思想;
具体代码如下:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
public class CopyPlus {
public static void main(String[] args) {
//copyPlus() 方法是将指定的文件夹(包含其中所有的文件及子文件夹)拷贝到目的目录
//此处传参解释:第一个String参数为被拷贝文件夹的全路径,第二个String参数为拷贝到的目的路径,将原文件拷贝到D:\\java\\copy1中去
copyPlus("D:\\java\\copy\\copystart","D:\\java\\copy1");
}
private static void copyPlus(String src , String endsrc) {
//创建原文件夹的路径和目的文件夹的路径所对应的File对象
File file = new File(src);
File endfile = new File(endsrc+"\\\\"+file.getName());
//先将目的文件夹创建好,后续将里面的文件及子文件夹拷贝进去
endfile.mkdirs();
//用for循环遍历原文件夹中的子文件夹及文件
for (File f : file.listFiles()) {
//判断依次循环遍历出来的是子文件夹还是文件
if(f.isFile()){
//是文件的话,将调用copy()方法,将此文件拷贝到对应的目的路径中去
copy(f.getAbsolutePath(),endfile.getAbsolutePath()+"\\\\"+f.getName());
}else{
//是子文件夹的话,将调用copyPlus()方法,运用递归思想重新在其对应位置创建一个文件夹(包含这个文件夹中的所有文件以及子文件夹)
copyPlus(f.getAbsolutePath(),endfile.getAbsolutePath());
}
}
}
private static void copy(String src,String endsrc) {
BufferedInputStream dis = null;
BufferedOutputStream dos = null;
try {
FileInputStream fis = new FileInputStream(src);
FileOutputStream fos = new FileOutputStream(endsrc);
dis = new BufferedInputStream(fis);
dos = new BufferedOutputStream(fos);
//定义一个数组保存字节数据
byte[] b = new byte[1024];
//定义一个int变量len记录读取到的有效个数,如果读到文件末尾了,返回-1
int len = 0;
//遍历读取数据并将数据写入指定目的路径
while((len = dis.read(b)) != -1){
dos.write(b, 0, len);
dos.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(dos != null){
//关闭资源
dos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if(dis != null){
//关闭资源
dis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
执行前文件夹截图
需要被拷贝的文件夹截图:
拷贝到的目的地址路径截图:
执行结束后目的地址的路径截图:
2893

被折叠的 条评论
为什么被折叠?



