
Java递归查询文件下所有的图片,移动到指定文件夹中,分批次建立子文件夹
发布日期:2021-05-08 17:19:55
浏览次数:16
分类:精选文章
本文共 3661 字,大约阅读时间需要 12 分钟。
代码实例
项目背景
我们需要将指定目录下的图片文件移动到目标目录,并按照一定规则进行重命名和分批次存储。
代码实现
package com.syrdbt.java.study;import java.io.File;import java.util.ArrayList;import java.util.Arrays;import java.util.Comparator;import java.util.List;public class FileUtils { public static void main(String[] args) { File inputFile = new File("/Users/shiheng/desktop/测试文件"); String outputPath = "/Users/shiheng/desktop/测试结果"; Listfiles = FileUtils.listAllImageFile(inputFile); System.out.println("图片文件总数量:" + files.size()); // 按照文件名排序 files.sort(new Comparator () { @Override public int compare(File file1, File file2) { return file1.getName().compareTo(file2.getName()); } }); boolean batchSaveFlag = false; int batchFileNumber = 10; int totalFileSize = files.size(); if (!batchSaveFlag) { for (File file : files) { String newFilePath = outputPath + "/" + file.getName(); File newFile = new File(newFilePath); file.renameTo(newFile); } return; } for (int i = 0; i < totalFileSize; i += batchFileNumber) { int start = i + 1; int end = start + batchFileNumber - 1; String newDirPath = outputPath + "/" + start + "-" + end; File newChildDir = new File(newDirPath); if (!newChildDir.exists()) { newChildDir.mkdir(); } for (int j = 0; j < batchFileNumber; j++) { if (i + j >= files.size()) { break; } String newFilePath = newDirPath + "/" + files.get(i + j).getName(); File newFile = new File(newFilePath); files.get(i + j).renameTo(newFile); } } } public static List listAllImageFile(File file) { List resultList = new ArrayList<>(); if (file == null || file.listFiles() == null || 0 == file.listFiles().length) { return resultList; } for (File tempFile : file.listFiles()) { if (tempFile.isDirectory()) { resultList.addAll(listAllImageFile(tempFile)); } else { if (isImage(tempFile)) { resultList.add(tempFile); } } } return resultList; } public static boolean isImage(File file) { if (file == null) { return false; } String fileName = file.getName(); if (fileName == null || "".equals(fileName)) { return false; } String[] splitFileNames = fileName.split("\\."); if (splitFileNames.length != 2) { System.out.println("错误的文件格式,路径" + file.getPath() + " 名称:" + file.getName()); return false; } String fileSuffix = splitFileNames[1]; if (fileSuffix.equals("jpg") || fileSuffix.equals("png") || fileSuffix.equals("jpeg") || fileSuffix.equals("JPG") || fileSuffix.equals("PNG") || fileSuffix.equals("JPEG")) { return true; } System.out.println("错误的文件格式,路径" + file.getPath() + " 名称:" + file.getName()); return false; }}
测试结果
在测试过程中,我们发现源目录下包含多个子文件夹和图片文件。通过代码运行后,目标目录中会生成对应的子文件夹,将图片文件按照文件名排序后移动到相应的位置。
图片分批次存储
在代码中,我们可以通过设置 batchSaveFlag
为 true
来启用分批次存储功能。这样可以将图片文件按一定批次移动到目标目录下的子文件夹中,每个子文件夹的文件名格式为 start-end
,例如 1-10
表示第1到第10个文件。
总结
通过上述代码,我们可以实现将指定目录下的图片文件移动到目标目录,并根据需求选择是否启用分批次存储功能。代码支持文件名排序和重命名,同时能处理文件夹嵌套结构,确保所有图片文件都能正确移动到目标目录下。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月29日 03时30分45秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
lvm基本知识与常用命令
2025-04-11
lvs+keepalive主从和主主架构
2025-04-11
LVS--NAT模型介绍及模型实现
2025-04-11
LVS-DR工作原理图文详解
2025-04-11
LVS-DR模型实现调度
2025-04-11
LVS-负载均衡
2025-04-11
LVS基本介绍
2025-04-11
LVS精益价值管理系统 DownLoad.aspx 任意文件读取漏洞复现
2025-04-11
LVS精益价值管理系统 LVS.Web.ashx SQL注入漏洞复现
2025-04-11
LVS负载均衡
2025-04-11
lxc(2):lxc命令
2025-04-11
Lync Server单前端无边缘的外部访问思考
2025-04-11
Lync 小技巧-17-查询Lync 2013聊天记录
2025-04-11
Lync 小技巧-52-Lync 2013-不加域-客户端-2-导入-证书-信任链
2025-04-11
LZ4 1.10 压缩算法发布!具有多线程功能,压缩速度显著提高达 8 倍
2025-04-11
lz4_flex 项目教程
2025-04-11
lzg_ad:打印机需要的组件支持
2025-04-11
M2 Postmortem
2025-04-11
mabatis 中出现< 以及> 代表什么意思?
2025-04-11