复制文件夹
流程:
main方法 调用
copyDir(复制文件夹方法) 调用
copyFile(复制文件方法)
代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* @author BF-Lone Silver Wind
*/
public class CopyFolder {
public static void main(String[] args) throws IOException {
String src = "C:/Users/张三/Desktop/code";
String dest = "C:/Users/张三/Desktop/bbb";
copyDir(src, dest);
}
// 复制文件夹方法
public static void copyDir(String src, String dest) throws IOException {
File srcF = new File(src);
File destF = new File(dest);
// 1. 判断原文件是否为空
if (!srcF.exists()) {
// 可以抛出异常 或 输入文字
return;
}
// 2. 判断目标地址是否为空
if (!destF.exists()) {
destF.mkdirs();
}
// 3.判断路径是否是最后
if (!destF.getAbsolutePath().contains(srcF.getAbsolutePath())) {
destF = new File(destF, srcF.getName());
destF.mkdir();
}
// 4.生成原路径文件夹目录数组
File[] fileArray = srcF.listFiles();
for (File file : fileArray) {
if (file.isFile()) {
copyFile(new File(srcF, file.getName()), new File(destF, file.getName()));
} else {
copyDir(srcF + File.separator + file.getName(), destF + File.separator + file.getName());
}
}
}
// 普通的复制方法
public static void copyFile(File src, File dest) {
// 1
// 2 choose io
InputStream is = null;
OutputStream os = null;
try {
is = new FileInputStream(src);
os = new FileOutputStream(dest);
// 3
int len = -1;
byte[] flush = new byte[1024];
while ((len = is.read(flush)) != -1) {
os.write(flush, 0, len);
}
os.flush();
} catch (Exception e) {
// TODO: handle exception
} finally {
// 4
if (os != null) {
try {
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (is != null) {
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}