查找并拷贝目录中指定文件到某个文件夹
说明:该方法是通过递归遍历的方式查找某个文件夹及其子文件夹中的所有文件,如果检测到是.jpg文件就将其复制到D:\Download\target中。
需求场景:手机中有大量的文件,但是,我们只关心其中格式是.jpg的文件,因为它们记录了我生活的许多美好回忆。手动查找效率低,故考虑写一个程序,自动识别。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
public class BigOne {
// 计数器,用于命名文件
private static int id;
public static void main(String[] args) {
Long start = System.currentTimeMillis();
String targetPath = "D:\\Download\\target";
File dir = new File(targetPath);
dir.mkdirs();//创建目录
File source = new File("D:\\train照片副本\\image2");
String fileType = ".jpg";
search(source, targetPath, fileType);
System.out.println("-----Done---------" + (System.currentTimeMillis() - start) + "文件数量:" + id);
return;
}
public static void search(File source, String targetPath, String fileType) {
File[] ds = null;
if (source.isDirectory()) {
ds = source.listFiles();
}
if (ds == null) {
return;
}
System.out.println("ds长度=" + ds.length);
List<File> js = new ArrayList();
for (File aFile : source.listFiles()) {
if (aFile.isFile() && aFile.getName().toLowerCase().endsWith(fileType)) {
js.add(aFile);
}
}
for (File j : js) {
System.out.println(j); //打印文件名
String name = ++id + "";
while (name.length() < 5) {
name = "0" + name;
}
name += fileType; //创建一个File对象代表目标文件
File t = new File(targetPath, name);//文件复制 源文件j 目标文件t
try (FileInputStream fis = new FileInputStream(j);
FileOutputStream fos = new FileOutputStream(t)) {
byte[] data = new byte[16384];//16k
int len;
while ((len = fis.read(data)) != -1) {
fos.write(data, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
}
}
for (File d : ds) {
search(d, targetPath, fileType);
}
}
}
Reference
读后有收获,小礼物走一走,请作者喝咖啡。

作者:楼兰胡杨
本文版权归作者和博客园共有,欢迎转载,但请注明原文链接,并保留此段声明,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2019-05-31 Java 使用线程池和CountDownLatch分批插入或者更新数据