java操作文件复制,从多个文件夹复制同类型文件到一个文件
因为得到的资料是按章节分开的,每个章节是一个文件夹,里面有视频文件和讲解文档文件,有的里面还有文件夹,想要从每个章节文件夹中将文档文件全部复制到一个文件夹中方便查看。
第一次自己想着问题需求做的代码,感觉实在是心里忐忑。最后功能虽然实现了,但总觉得不简洁又有些问题可能没发现,继续努力吧!
package com.stageOne;
import java.io.*;
* 步骤:
* 1,创建File对象,关联原始 文件夹
* 2. 创建目的地文件夹文件对象
* 3. 判断文件是否存在,不存在则创建
* 4,遍历文件夹中所有内容,找到文件名为"笔记"的文件夹,复制文件夹中所有内容到新的目录下
* 遍历文件夹中所有内容 ,使用遍历文件方法
* 5.遍历文件的方法:
* 5.1获取给定的File目录下所有的文件或者目录的File数组
5.2遍历该File数组,得到每一个File对象
5.3如果该File对象是目录
判断文件夹名字是否为笔记
是:调用复制文件的方法,
不是:递归调用
* 6,复制文件的方法
* 6.1获取数据源File对象目录下的所有文件或目录的File数组
* 6.2遍历该File数组,得到每一个File对象
* 6.3判断是否为目录
* 是:递归调用copyFile
不是,调用字节流复制文件
* 7,字节流复制文件:复制文件采用字节缓冲流一次读取一个数组的方式进行复制
* */
public class copyFileTest {
public static void main(String[] args) throws IOException {
//创建File对象,关联原始 文件夹
File srcFile = new File("G:\\原始 文件夹");//所有章节所在的文件夹
//创建目的地文件夹File对象
File destFile = new File("G:\\","文档");
//判断文件是否存在,不存在则创建
if (!destFile.exists()){
destFile.mkdir();
}
//历文件夹中所有内容 ,使用遍历文件方法
getAllFiles(srcFile,destFile);
}
//遍历文件的方法:
private static void getAllFiles(File srcFile,File destFile) throws IOException {
//获取给定的File目录下所有的文件或者目录的File数组
File[] files = srcFile.listFiles();
//遍历该File数组,得到每一个File对象
for (File file:files){
//如果该File对象是目录
if(file.isDirectory()){//总觉得这儿有问题?
//判断文件夹名字是否为笔记(每个文档都在每个章节文件夹下的 笔记 文件夹里面,若是文件目录有特征,也可以用file.getName.contains("XX"))
//System.out.println(file.getName());
if (file.getName().equals("笔记")){
copyFloder(file,destFile);
}else {
getAllFiles(file,destFile);
}
}
}
}
//复制文件的方法
private static void copyFloder(File file,File destFile) throws IOException {
//获取数据源File对象目录下的所有文件或目录的File数组
File[] files = file.listFiles();
//遍历该数组。得到每一个File对象
for (File f:files){
if (f.isDirectory()){
copyFloder(f,destFile);
}else {
copyFile(f,destFile);
}
}
}
private static void copyFile(File file,File destFile) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
File ff = new File(destFile,file.getName());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(ff));
byte[] bys = new byte[1024];
int len;
while((len=bis.read(bys))!=-1){
bos.write(bys,0,len);
}
// System.out.println("复制成功");
bis.close();
bos.close();
}
}