2017-07-18 66 views
1

以下作品的代码,但我的问题是,控制台输出正确显示例如:删除部分文件名的文件夹中

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

我甚至使用了substring方法String name = file.getName()。substring(0,20); 仍然它做同样的事情并非文件夹中的所有文件名都被改变 – Jonathan

+0

有没有办法让这个过去?在这种情况下,子字符串和索引不适用于我, – Jonathan

+0

您试图实现的目标是从原始文件名中删除-2017xxxx-模式? – assembler

回答

2

Okay there any other way to rename the files?

是。使用更新的NIO 2类,特别是Files.move()方法。

最低限度,替代file.renameTo(new File(newPath))有:

Files.move(file.toPath(), Paths.get(newPath)); 

如果此举失败,而不是从renameTo()false布尔返回值,这将引发描述例外。

您还应该更改其余代码以使用更新的类。虽然不是必需的,但建议这样做。

+0

是从番石榴File.move? – assembler

+0

@assembler单击链接。它内置Java 7+。 – Andreas

+0

好吧,我换了一条线,我得到一个红线下(移动)在日食 – Jonathan