2017-07-18 80 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