为什么File方法重命名()删除文件?

时间:2016-02-11 00:19:11

标签: java

我想删除Windows放入文件名的空格。 我运行以下代码来重命名测试目录中的所有文件。结果:所有文件都消失了。 我很困惑为什么。

import java.io.*;

public class FileRenamer {
    public static void main(String[] args) {
        for (File file: (new File("O:\\test0")).listFiles())
            file.renameTo(new File(file.getName().replaceAll("\\s","")));
        System.exit(0);
    }
}

2 个答案:

答案 0 :(得分:2)

TL; DR:您正在移动文件。

列出目录"O:\\test0中的文件。

对于每个此类文件,您可以创建String

file.getName().replaceAll("\\s","")

你最终得到:

new File("someFileName")

所以你打电话给:

file.renameTo(new File("someFileName"))

现在,someFileName不是绝对的路径;但是相对路径。因此,您已从O:\\test0\\some File Name移至someFileName,其中someFileName位于该计划的目录中。

P.S。无需拨打System.exit(0)

答案 1 :(得分:0)

是的,我发现这些文件已移至我的类文件目录。

鲍里斯关于相对路径与绝对路径的提示向我展示了解决方案:使用

public File(File parent, String child)

新抽象File对象的构造函数。以下代码正确完成了工作。

import java.io.*;

public class FileRenamer {
    public static void main(String[] args) {
        File dir = new File("O:\\test0");
        for (File file: dir.listFiles()) 
          file.renameTo(new File(dir, file.getName().replaceAll("\\s","")));
    }
}