【问题标题】:Removing duplicate extension files on Java删除 Java 上的重复扩展文件
【发布时间】:2016-11-08 11:10:34
【问题描述】:

有一个包含以下文件的文件夹

myoutput.pdf
hello.pdf.pdf
byebye.txt
hey.txt.txt

如何仅删除具有重复扩展名的文件的扩展名?示例中只有pdf和txt,但在实际示例中可以是任何类型的扩展名。

我已经走到这一步了:

String dir = "C:/Users/test";

File[] files = new File(dir).listFiles();

for (File file : files) {
    if (file.isFile()) {
        System.out.println(file.getName());
    }
}

但我不知道现在如何检测具有“重复扩展名”的那些并将其重命名为“单个扩展名”

我想要的输出是:

myoutput.pdf
hello.pdf
byebye.txt
hey.txt

提前致谢。

【问题讨论】:

    标签: java string file-io


    【解决方案1】:

    你可以使用

    file.getName().replaceAll("(\\.\\w+)\\1+$", "$1")
    

    regex demo

    模式详情

    • (\\.\\w+) - 第 1 组捕获一个点和 1 个或多个单词字符(\\w+ 可能替换为 [^.]+ 以匹配 1 个或多个除点以外的字符)
    • \\1+ - 在第 1 组中捕获的相同值出现一次或多次
    • $ - 字符串结束。

    替换模式只是对第 1 组 ($1) 的反向引用,以仅出现 1 次扩展。

    【讨论】:

    • 谢谢,这会打印出正确的文件名,但我现在如何“重命名”文件?我试过file.renameTo(file.getName().replaceAll("(\\.\\w+)\\1+$", "$1"));,但它不起作用。
    【解决方案2】:

    您可以将代码替换如下:

    if (file.isFile()) {
        String newFileName = file.getName().replaceAll("(\\.\\w+)\\1+$", "$1");
        file.renameTo(new File(file.getParent() + "/" +newFileName));
    }
    

    【讨论】:

      猜你喜欢
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 2016-12-05
      • 2020-11-16
      相关资源
      最近更新 更多