import java.io.*;
/**
* IO流递归拷贝一个文件夹里面的所有文件,到另一个文件夹。如果重复不拷贝,可续拷
* @author silence
*/
public class IoCopy {
private static int count = 0;
/**
* 需要拷贝的起始地“文件夹路径”
*/
private static final File START = new File("C:\\Users\\Administrator\\Desktop\\作业");
/**
* 目的地“文件夹路径”
*/
private static final File END = new File("C:\\Users\\Administrator\\Desktop\\111");
public static void main(String[] args) throws IOException {
//判断文件路径
ifFile();
//拷贝文件
load(START);
System.out.println("-----程序结束,拷贝 " + count + " 条数据-----");
}
/**
* 判断文件路径
*/
private static void ifFile() {
//判断起始地和目的地是否为文件,并且是否存在
if (!START.exists() || !START.isDirectory()) {
System.out.println("起始地路径 不存在,或不为文件夹");
System.exit(1);
}
//判断目的地是否存在,且为文件夹
if (!END.exists() || !END.isDirectory()) {
boolean mkdirs = END.mkdirs();
//如果创建失败
if (!mkdirs) {
System.out.println("目的地路径不存在,或存在相同名的文件,文件夹自动创建失败");
System.out.println("解决办法:检测路径是否正确,删除该路径同名的文件");
System.exit(1);
}
}
}
/**
* @param start 源文件路径
*/
private static void load(File start) {
File[] files = start.listFiles();
if (files == null) {
return;
}
for (File f : files) {
try {
if (f.isFile()) {
if (!isEedFile(f)) {
//如果目的地没有改文件,或者文件大小不一致
BufferedInputStream input = new BufferedInputStream(new FileInputStream(f));
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(END + "\\" + f.getName()));
System.out.println("正在复制第" + (++count) + "条数据:" + f.getName());
byte[] arr = new byte[1024];
int len;
while ((len = input.read(arr)) != -1) {
out.write(arr, 0, len);
}
input.close();
out.close();
continue;
}
System.out.println(f.getName() + "重复 已跳过");
} else {
//递归读取
load(f);
}
} catch (IOException e) {
System.out.println("文件拷贝过程出现异常,程序退出");
System.exit(1);
}
}
}
/**
* 判断目的地是否包含改文件, 不支持多层递归判断
*
* @param f 当前文件
*/
private static boolean isEedFile(File f) {
File[] files = END.listFiles();
if (files != null) {
for (File file : files) {
//只判断文件
if (file.isFile()) {
if (f.getName().equals(file.getName())) {
//文件名一致,再判断文件大小是否一致,是否覆盖复制
return f.length() == file.length();
}
}
}
}
return false;
}
}
IO流递归拷贝一个文件夹里面的所有文件,到另一个文件夹。如果重复不拷贝,可续拷
最新推荐文章于 2021-11-10 20:40:52 发布