下面的代码有效,但我的问题是控制台输出显示正确,例如:
3-M-ALABAMA-SUIQUARTER2
3-M-ALABAMA-SUIQUARTER2
3-M-ALABAMAW-22017
3-M-ALABAMAW-22017
上面的输出显示我的索引是-2017但是当文件夹中的实际文件名被更改时,会跳过一些文件名。例如
原始文件名:3-M-ALABAMA-SUIQUARTER2-2017200346-CD6140
控制台输出:3-M-ALABAMA-SUIQUARTER2
文件夹中的某些文件未更改:3-M-ALABAMA-SUIQUARTER2-2017200346-CD6140
但是,该文件夹中的某些文件有3-M-BATTLECREEKMIW-22017-2017200346-CD619B
,有些文件是3-M-ARLINGTONOHLOCALW-2-2017200346-CD61A8
所以我认为java在文件更改中进行实际更改时会在哪里切断?你能帮助我吗?
for(File file:filesInDir) {
x++;
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));
}
答案 0 :(得分:2)
是。使用较新的NIO 2类,尤其是Files.move()
方法。
至少,将file.renameTo(new File(newPath))
替换为:
Files.move(file.toPath(), Paths.get(newPath));
如果移动失败,那将抛出描述性异常,而不是来自renameTo()
的false
布尔返回值。
您还应该更改其余代码以使用较新的类。虽然不是必需的,但建议这样做。