可以复制单级文件夹,也复制多级文件夹,用递归
代码示例:
package com.ahclg.copyFolder;
import java.io.*;
public class CopyFolderDemo2 {
public static void main(String[] args) {
File srcFile = new File("E:\\javaSave");//数据源,可能是目录也可能是文件
File destFile = new File("F:\\javaPaste");//目的地目录,在此目录下存放复制来的内容
//调用文件夹的复制方法 ,参数类型File,可以是文件也可以是目录
copyFolder(srcFile, destFile);
}
//多级文件夹复制方法,参数类型File,可以是文件也可以是目录
private static void copyFolder(File srcFile, File destFile) {
if (srcFile.isDirectory()) {
String srcFileName = srcFile.getName();
//封装新地址路径下的虚拟复本
File newFolder = new File(destFile, srcFileName);//对应F:\javaPaste\javaSave
if (!newFolder.exists()) {
newFolder.mkdir();
}
//获取数据源File下所有文件或目录的数组
File[] fileArray = srcFile.listFiles();
for (File file : fileArray) {
copyFolder(file, newFolder);
}
} else {
File newFile = new File(destFile, srcFile.getName());
copyFile(srcFile, newFile);
}
}
//复制文件方法
private static void copyFile(File srcFile, File destFile) {
try(
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));
) {
byte[] bytes = new byte[1024];
int len = 0;
while ((len = bis.read(bytes)) != -1){
bos.write(bytes, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
下面是复制单级文件夹供参考:
public class CopyFolderDemo1 {
public static void main(String[] args) {
//创建数据源目录File对象,路径是:E:\javaSave\aFile
File srcFolder = new File("E:\\javaSave\\aFile");
//获取数据源目录File对象的名称myFile
String srcFolderName = srcFolder.getName();//aFile
//创建目的地File对象
File destFolder = new File("F:\\javaPaste", srcFolderName);//在myFile目录下存放复制而来的文件夹
System.out.println(srcFolderName);//aFile(目录)
//判断目的地目录对应的File是否存在,如果不存在,就创建
if (!destFolder.exists()) {
destFolder.mkdir();
}
//获取数据源目录下的所有的文件的File数组
File[] listFiles = srcFolder.listFiles();
//遍历File数组,得到每一个File对象,即数据源文件
for (File srcFile : listFiles) {
String srcFileName = srcFile.getName();
File destFile = new File(destFolder, srcFileName);
//复制文件
copyFile(srcFile, destFile);
}
}
//复制文件方法
private static void copyFile(File srcFile, File destFile) {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream(srcFile));
bos = new BufferedOutputStream(new FileOutputStream(destFile));
byte[] bytes = new byte[1024];
int len = 0;
while ((len = bis.read(bytes)) != -1) {
bos.write(bytes, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bis != null){
try {
bos.close();
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}