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/测试结果";
List
files = 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;
}
}

测试结果

在测试过程中,我们发现源目录下包含多个子文件夹和图片文件。通过代码运行后,目标目录中会生成对应的子文件夹,将图片文件按照文件名排序后移动到相应的位置。

图片分批次存储

在代码中,我们可以通过设置 batchSaveFlagtrue 来启用分批次存储功能。这样可以将图片文件按一定批次移动到目标目录下的子文件夹中,每个子文件夹的文件名格式为 start-end,例如 1-10 表示第1到第10个文件。

总结

通过上述代码,我们可以实现将指定目录下的图片文件移动到目标目录,并根据需求选择是否启用分批次存储功能。代码支持文件名排序和重命名,同时能处理文件夹嵌套结构,确保所有图片文件都能正确移动到目标目录下。

上一篇:(六)使用transition组件实现过渡效果
下一篇:(五)写一个star组件,状态包括全亮、半亮、不亮3个状态

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月29日 03时30分45秒