从目录中的所有文件名中删除空格 - Java

Remove whitespace from all filenames in directory - Java

我有图像目录,我想通过删除名称中的所有空格来重命名文件。

假设我有一个名为“f il ena me .png”的文件(我计划检查目录中的所有文件名)。我如何删除所有空格并重命名图像,以便正确的文件名(对于这种特定情况)是 "filename.png".

到目前为止,我已经尝试了以下代码,它实际上删除了目录中的图像(我目前正在目录中的一张图像上对其进行测试)。

public static void removeWhiteSpace (File IBFolder) {
    // For clarification:
    // File IBFolder = new File("path/containing/images/folder/here");
    String oldName;
    String newName;
    String temp;
    for (File old : IBFolder.listFiles()) {
        oldName = old.getName();
        temp = oldName.replaceAll(" ", "");
        // I have also tried:
        // temp = oldName.replaceAll("//s", "");
        temp = temp.split(".png")[0];
        newName = temp + ".png";
        System.out.println(newName);
        old.renameTo(new File(newName));
    }
}

我认为它不会删除图像,而是将它们移动到您当前的工作目录并将其重命名为 newName,但是由于 newName 缺少路径信息,它将重命名 /将其移动到“./”(从您 运行 您的程序的任何位置)。

我认为你在这些行中有错误:

    temp = temp.split(".png")[0];
    newName = temp + ".png";

“。”是一个通配符,假设您的文件名为 "some png.png",newName 将是 "som.png",因为 "some png.png".replaceAll(" ", "").split(". png") 结果为 "som".

如果出于任何原因您需要 String.split() 方法,请正确引用“.”:

    temp = temp.split("\.png")[0];

忽略命名约定(我打算稍后修复)这是我最终确定的解决方案。

public static void removeWhiteSpace (File IBFolder) {
    // For clarification:
    // File IBFolder = new File("path/containing/images/folder/here");
    String oldName;
    String newName;
    for (File old : IBFolder.listFiles()) {
        oldName = old.getName();
        if (!oldName.contains(" ")) continue;
        newName = oldName.replaceAll("\s", "");

        // or the following code should work, not sure which is more efficient
        // newName = oldName.replaceAll(" ", "");

        old.renameTo(new File(IBFolder + "/" + newName));
    }
}