以下代码file.renameTo(new File(newPath));我没有正确地重命名所有文件,它跳过一些我甚至使用过Files.move(file.toPath(),Paths.get(newPath));但我在eclipse中遇到一个异常错误,说我认为java.nio.file.FileAlreadyExistsException正在发生,因为有一些文件集,当它们被截断时,它们将具有相同的名称是否有办法在eclipse中绕过此错误或微调renameTo()?
我也尝试过.substring(0,22);, name.replaceFirst(" -2017。*","");和 name.substring(0,file.getName()。indexOf(" -2017")结果相同。
例如: 原始文件名:3-M-ALABAMA-SUIQUARTER2-2017200346-CD6140 控制台输出:3-M-ALABAMA-SUIQUARTER2 文件夹中的某些文件未更改:3-M-ALABAMA-SUIQUARTER2-2017200346-CD6140
for(File file:filesInDir) {
String name = file.getName().substring(0, file.getName().indexOf("-2017"));
String newName = name;
System.out.println(newName); // prints prints to file
String newPath = absolutePathOne + "\\" + newName;
file.renameTo(new File(newPath));
or
Files.move(file.toPath(), Paths.get(newPath));
答案 0 :(得分:1)
您无法将特定文件重命名为您正在重命名文件的文件夹中已存在的文件名。恕我直言......即使您可以,也不应该出于一些常识性原因。
换句话说,如果我们有一个名为All_My_Files
的文件夹(目录),并且在此文件夹中我们有两个文本文件,一个名为MyFile-2016.txt
,另一个名为MyFile-2017.txt
。现在,我们要重命名这两个文件中的每一个,以便不再存在每个文件名的破折号和年份(即:-2016或-2017)。基本上你最终要做的是将两个文件名都设为 MyFile.txt ,这是不允许的。你的第一次重命名就没问题,因为在第一次使用它时,名为 MyFile.txt 的文件夹中没有文件,但是一旦第二次重命名尝试在第二个文件名上完成,它只是简单由于名称 MyFile.txt 已存在于第一次重命名尝试完成的该文件夹中,因此将失败。这不是代码问题,这是本地文件系统的问题。这些是本地文件系统的规则(没有文件可以在同一文件夹中具有相同的名称)。查看要重命名的文件名,删除不需要的文本后是否会创建相同的文件名?如果有,那么将无法重命名。
这同样适用于移动文件。您不能将文件移动到已包含具有相同名称的文件的文件夹(目录)。上面的文件系统规则适用。但是,您可以覆盖目标路径中的现有重复文件名(如果它在移动期间存在,如果,则告诉 Files.move() 方法这样做:
Files.move(sourcePathAndFileName, destinationPathAndFileName,
StandardCopyOption.REPLACE_EXISTING);
您需要导入:
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
请记住,在您公然覆盖现有文件之前,最好确保这是您想要做的。提示用户进行覆盖将是一种正常的行动方式,但并不一定需要针对特定的内部操作。