-
对于要处理的文件,分布在不同文件夹下,需要整合,修改,提取都非常好用
-
introduction
- 针对上次文章批量修改文件名,这次在电脑任意盘符批量复制文件夹下所有特定文件
- 其中还有部分小小功能需加以实现:文件大小,结合上次批量改名等等,
- 希望用到看到的各位求学者可以在评论下方提出点子
- 学无止境,在计算机学习中需要 !!! 勤勉 !!!
- 有一句话:世上无难事,庸人自扰之
- 核心:递归-->过滤器,过滤文件夹和特定文件;遍历文件数组;判断是否存在相同文件,存在则重新命名
- 字节缓冲区读取字节数组
- 额外实现:全局静态变量记录总数(可以参考之前文章的递归拓展:不死神兔)
- 文本扫描器
package com.banma;
import java.io.*;
import java.util.Scanner;
/**
* User: BanMa
*/
public class App {
// 定义统计变量记录Java文件的总数
static int count = 0;
public static void main(String[] args) throws IOException{
// 获得源文件夹
File srcDir = inputFile();
// 创建目标文件夹对象
File destDir = new File("E:\\workResources\\04\\");
destDir.mkdirs();
// 拷贝Java文件
copyJavaFile(srcDir, destDir);
System.out.println("count = " + count);
}
/*
* 将srcDir文件夹下的所有.Java文件拷贝到destDir文件夹下
*/
public static void copyJavaFile(File srcDir,File destDir) throws IOException{
// 获得源文件夹下所有的.java文件和子文件夹
File[] files = srcDir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if(pathname.isDirectory() || pathname.getName().endsWith(".Java" ))return true;
return false;
}
});
// 遍历文件数组
for (File file : files) {
// 判断file是否是文件夹
if(file.isDirectory()) {
// 递归调用当前方法
copyJavaFile(file, destDir);
} else { // 如果是文件,拷贝到目标文件夹destDir下
// 获得要拷贝的文件名
String fileName = file.getName(); // test02.java
// 在目标文件夹destDir下创建一个同名文件名
File destFile = new File(destDir,fileName); // D:/java/112134567832test02.java
// 判断目标文件是否存在
if(destFile.exists()) {
// 重命名目标文件名
destFile = new File(destDir, System.currentTimeMillis() + fileName);
}
System.out.println(destFile);
copyFile(file, destFile);
}
}
}
/*
* 字节流缓冲区流读写字节数组
*/
private static void copyFile(File srcFile, File destFile) throws IOException {
// 计数器加一
count ++;
// 创建字节输入流
FileInputStream fis = new FileInputStream(srcFile);
// 创建字节输出流
FileOutputStream fos = new FileOutputStream(destFile);
int len = 0;
byte[] buffer = new byte[1024];
// 循环读取数据
while((len = fis.read(buffer)) !=-1) {
// 利用输出流往输出目的写数据
fos.write(buffer,0,len);
}
// 关闭资源
fis.close();
fos.close();
}
/*
* 根据用户输入的路径字符串创建文件对象
*/
private static File inputFile() {
// 创建键盘输入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个文件夹路径:");
//c:aaa
// 接收用户输入的路径
String filePath = sc.nextLine();
// 根据路径字符串创建文件对象
File dir = new File(filePath);
if(!dir.exists()) throw new RuntimeException("你输入的文件路径不存在!!!");
// 判断是否是文件夹
if(!dir.isDirectory()){
throw new RuntimeException("输入的路径不是文件夹路径!!!");
}
return dir;
}
}