我必须读取文件夹中的文件并重命名它们。在本例中,名称中包含 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/