Java - 计算和重命名文件名

标签 java

我必须读取文件夹中的文件并重命名它们。在本例中,名称中包含 parrot 的文件有 3 个,包含 Joker 的文件有 4 个,包含uzzer 的文件有 4 个。

我可以使用子字符串获得“buzz”、“parrot”和“buzz”等单词。但我必须仔细检查它们并计算它们出现的次数,然后将它们命名为 01,02,03,... 一旦分组。我很难受。任何建议都是有帮助的。

原始文件名

apple_orange_buzz_banana01.txt
apple_orange_buzz_banana02.txt
apple_orange_buzz_banana05.txt
apple_orange_buzz_banana06.txt
apple_orange_joker_banana03.txt
apple_orange_joker_banana04.txt
apple_orange_joker_banana07.txt
apple_orange_joker_banana10.txt
apple_orange_parrot_banana08.txt
apple_orange_parrot_banana09.txt
apple_orange_parrot_banana11.txt

重命名文件名

buzz01.txt
嗡嗡声02.txt
嗡嗡声03.txt
嗡嗡声04.txt

joker01.txt
clown 02.txt
clown 03.txt
clown 04.txt

parrot01.txt
parrot02.txt
parrot03.txt

谢谢

最佳答案

您可以使用 Map 来存储每种文件的计数器(buzz、joker 等),并使用正则表达式来查找您感兴趣的名称部分。

所以你的代码可以看起来像

Pattern p = Pattern.compile("apple_orange_(\\w+)_banana\\d+[.]txt");
Map<String, Integer> map = new HashMap<>();

File dir = new File("d:/zzz");//path to directory containing your files
File[] files = dir.listFiles();//you can provide file filter here
Arrays.sort(files);//lets make sure that files are sort alphabetically

for (File f : files) {
    Matcher m = p.matcher(f.getName());
    if (m.find()) {
        String name = m.group(1);
        int counter = map.getOrDefault(name, 0) + 1;
        map.put(name, counter);
        f.renameTo(new File(dir, String.format("%s%02d.txt", name, counter)));
    }
}

关于Java - 计算和重命名文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27276896/

相关文章:

Java:套接字还是 RMI?

java - Head First 设计模式与 Head First 面向对象分析与设计

java - 如何使用 LibGDX 生成透明的 PNG 图像?

java - 什么是 com.sun.media.sound.PortMixer-s 类?

java - 不允许加载本地资源 : in chrome tomcat

java - 在不同的 java maven 项目中使用 sbt 构建的 scala 项目的传递依赖项

java - 从字符串值中读取子字符串

java - Tapestry 中的 init() 方法

java - 如何调用一个不返回任何内容的方法?

java - LinkedHashSet 上的迭代比 ArrayList 上的迭代更快