2017-05-05 140 views
1

我需要重命名一個名稱爲.txt文件的.afp文件。我試圖讓這件事情起作用,沒有任何幫助,我偶然發現了許多「解決方案」。用不同擴展名的文件中的字符串重命名文件

假設我在C:/test/a/Mytes t.txt中有一個txt文件,並且我想要將.afp文件重命名爲C:/files/b/Testf ile.afp。這正是我想要做的(根據在這個網站上找到的解決方案),它不起作用。我切.txt文件的擴展名並獲得唯一的文件名:

String fileNameNoExt=fileName.substring(0, fileName.lastIndexOf('.')); 
//fileName is .txt file name 
File file = new File(afpSRC, afpName); 
file.renameTo(new File(afpSRC, fileNameNoExt + ".afp")); 

afpSRC包含路徑到文件夾中.afp文件所在和afpName是文件的名稱。

誰能告訴我爲什麼這不起作用和.afp文件名保持不變?

+0

是什麼在'fileName'?它只需要文件名而不是完整的路徑就可以工作。 – jingx

+0

我後來添加了評論,你可能沒有看到,對不起。 fileName只是txt文件名。不是絕對路徑 –

回答

0

可能是因爲File file = new File(afpSRC, afpName);沒有引用現有文件。

我懷疑afpSRC不是父路徑或afpName不是文件名。或兩者 ?

要進行調試,應該先檢查文件是否存在。
如果不存在,則拋出異常。
除了任何方式(調試和最終代碼),您應該檢查返回的值renameTo()並處理它。

這裏是一個示例代碼:

String fileNameNoExt=fileName.substring(0, fileName.lastIndexOf('.')); 
//fileName is .txt file name 
File file = new File(afpSRC, afpName); 
if (!file.exists()){ 
    throw new RuntimeException("file not found = " + file); 
} 

boolean isRenamed = file.renameTo(new File(afpSRC, fileNameNoExt + ".afp")); 
System.out.println("isRenamed = " + isRenamed); 
if (!isRenamed){ 
    // handle the problem 
} 
+0

非常感謝,我意識到我複製.pdf版本的文件,而不是.afp在dst文件夾中,這是拋出錯誤,我只是在我試圖檢查文件是否存在後纔得到它。由於這個愚蠢的錯誤而丟失了2個小時.. –

+0

不客氣:)愚蠢的錯誤經常被評估:) – davidxxx

1

如果您使用Java NIO的設施,你將能夠通過一個例外解釋爲什麼重命名無法獲取信息。

Files.move(Path from, Path to, CopyOption... options) throws IOException

String fileNameNoExt=fileName.substring(0, fileName.lastIndexOf('.')); 
Path afpPathName = Paths.get(afpSRC, afpName); 
Path newPathName = Paths.get(afpSRC, fileNameNoExt + ".afp"); 
Files.move(afpPathName, newPathName); 
+0

Paths.get在它的每個參數之間放置一個目錄分隔符。第三行代碼應該是'Paths.get(afpSRC,fileNameNoExt +「.afp」)'......除非你真的想創建一個基本名稱只是「.afp」的文件。 – VGR

+0

@VGR哎呀!接得好。固定。 –