本文主要是介绍使用Java编写一个文件批量重命名工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《使用Java编写一个文件批量重命名工具》这篇文章主要为大家详细介绍了如何使用Java编写一个文件批量重命名工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...
背景
在开发移动应用时,UI设计通常会提供不同China编程分辨率的图片资源来适配多种屏幕尺寸。例如,在一个特定的应用场景中,seekbar范围0-64对应64张图片,用于滑动切换不同的颜色背景。设计师提供了"xhdpi", "xxhdpi", "xxxhdpi"三种不同尺寸的图片集,总共192张图片。手动为这些图片添加前缀或进行其他格式化操作既耗时又容易出错。因此,为了提高效率并减少人为错误,这里编写了一个Java工具类FileRenamer
,用以自动化这个过程。
处理
1. 文件夹检查与遍历
首先,FileRenamer
类定义了新文件名的前缀和源文件夹路径。然后通过rename()
方法获取指定路径下的文件夹对象,并验证其有效性。接下来,它遍历预设的子文件夹(如"xhdpi", "xxhdpi", "xxxhdpi"),对每个存在的子文件夹调用processSubFolder()
方法进行进一步处理。
2. 批量重命名
在processSubFolder()
方法中,程序筛选出所有.png
文件,并使用正则表达式匹配文件名中的数字和颜色值。根据匹配结果构造新的文件名,将原有的数字部分保留下来,同时将文件名更改为带有指定前缀的形式,如从0_color_ffff00.png
到ic_wangyou_color0_ffffff.png
。成功重命名后,程序会输出确认信息;若失败,则记录下错误。
3. 输出配置代码片段
最后,outputCodeSnippet()
方法负责生成一段可以复制粘贴到工程配置中的代码片段。该方法先过滤并排序符合新前缀的所有PNG文件,然后构造包含这些文件引用的字符串。此外,它还会列出未被包含的文件,以便开发者检查是否有遗漏。
完整代码
通过上述步骤,FileRenamer
实现了批量重命名图片文件的功能,并自动生成了配置代码片段,极大地简化了资源管理的工作量。以下是该工具类的完整源码:
package com.wang.you.util; import java.io.File; import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; public class FileRenamer { private static final String NEW_PREFIX = "ic_wangyou_color"; private static final String FOLDER_PATH = "/storage/emulated/0/wangyou"; public static void rename() { File folder = new File(FOLDER_PATH); if (!folder.exists() || !folder.isDirectory()) { System.out.println("指定的路径不是一个有效的文件夹!"); return; } String[] subFolders = {"xhdpi", "xxhdpi", "xxxhdpi"}; for (String subFolderName : subFolders) { File subFolder = new File(folder, subFolderName); if (subFolder.exists() && subFolder.isDirectory()) { processSubFolder(subFolder); } else { System.out.println("子文件夹 " + subFolderName + " 不存在或不是一个有效的文件夹!"); } } } private static void processSubFolder(File subFolder) { File[] files = subFolder.listFiles((dir, name) -> name.toLowerCase().endsWith(".png")); if (files == null || files.length == 0) { System.out.println("在文件夹 " + subFolder.getName() + " 中没有找到任何 .png 文件!"); return; } for (File oldFile : files) { String oldFileName = oldFile.getName(); Pattern pattern = Pattern.compile("(\\d+)_(\\w+\\.png)"); Matcher matcher = pattern.matcher(oldFileName)编程; if (matcher.matches()) { String numberPart = matcher.group(1); String colorValueWithExt = matcher.group(2); String colorValue = colorValueWithExt.split("\\.")[0]; String newFileName = NEW_PREFIX + numberPart + "_" + colorValue + ".png"; File newFile = new File(subFolder, newFileName); if (oldFile.renameTo(newFile)) { System.out.println("Renamed: " + oldFileName + " -> " + newFileName); } else { System.out.println("Failed to rename: " + oldFileName); } } else { System.out.println("Invalid file name format: " + oldFileName); } } outputCodeSnippet(subFolder); } private static void outputCodeSnippet(File folder) { Pattern pattern = Pattern.compile("(?<=color)(\\d+)(?=_)"); List<File> allPngFiles = Arrays.stream(folder.listFiles()) .filter(file -> file.getName().toLowerCase().endsWith(".png")) .collect(Collectors.toList()); List<File> renamedFiles = allPngFiles.stream() .filter(file -> file.getName().startsWith(NEW_PREFIX)) .sorted((f1, f2) -> { Matcher m1 = pattern.matcher(f1.getName()); Matcher m2 = pattern.matcher(f2.getName()); if (m1.find() && m2.find()) { return Integer.compare(Integer.parseInt(m1.group()), Integer.parseInt(m2.group())); } return 0; }) .collect(Collectors.toList()); System.out.println("准备输出字符串renamedFiles: " + renamedFiles.size()); StringBuilder outputString = new StringBuilder("private final int[] wangyou_colorArr_" + folder.getName(http://www.chinasem.cn) + " = new int[]{\n"); for (File file : renamedFiles) { String fileNameWithoutExtension = file.getName().replaceFirst("[.][^.]+$", ""); outputString.append(" R.mipmap.") .append(fileNameWithoutExtensionjavascript) .append(",\n"); } if (outputString.toString().endsWith(",\n")) { outputString.setLength(outputString.length() - 2); } outputString.append("\n};"); System.out.println(outputString.toString()); List<File> unmatchedFiles = allPngFiles.stream() .filter(file -> !file.getName().startsWith(NEW_PREFIX)) .collect(CollectoSHZvicKrs.toList()); if (!unmatchedFiles.isEmpty()) { System.out.println("以下文件未被包含:"); unmatchedFiles.forEach(file -> System.out.println(" " + file.getName())); } } }
这段代码不仅解决了大批量图片文件的重命名问题,还自动生成了对应的资源数组,使得能够轻松地在项目中集成这些资源。这里只是一个示例,当然啦,实际使用要根据不同的文件名称去处理,照搬肯定是不行的
到此这篇关于使用Java编写一个文件批量重命名工具的文章就介绍到这了,更多相关Java文件批量重命名内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!
这篇关于使用Java编写一个文件批量重命名工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!