2012-05-04 54 views
0

我有兩個文件對象oldFilenewFile,我想交換相應的文件名。所以我重命名oldFiletmpFile名字第一。我得到的oldfile的絕對路徑,並追加「.bak的」吧:如何在java中以通用的方式重命名文件?

String tmpFile = oldFile.getAbsolutePath().toString()+".bak"; 
oldFile.renameTo(new File(tmpFile)); 

的問題是,TMPFILE包含路徑的原始字符串,而File類的構造函數對待‘\’作爲escape.So該TMPFILE可能「d:\ oldfile.java.bak」,但是什麼構造需要的是

new File("D:\\oldfile.java.bak"); 

我該如何處理呢?

回答

2

你必須用.replace("\", "\\")來逃避逃跑,但如果你必須這樣做,那麼意識到你不必在Windows上使用\。 Java同樣支持/,並且沒有這些問題。你可以做replace("\", "/"),它也可以。

您還需要閱讀並理解如何使用Java創建新文件。需要調用File.createNewFile()。只用構造函數創建一個File對象並不實際在文件系統上創建文件,也不保證該位置的文件存在。

3

File的構造函數不會將\視爲轉義。您需要跳過\\在字符串文字。字符串文字"\\"包含單個字符:'\'

String path = "D:\\oldFile"; 
System.out.println(path); // prints D:\oldFile 
File f = new File(path); 
System.out.println(f.getAbsolutePath()); // prints D:\oldFile 
+1

換句話說,陳紅旭,你的原創方法沒有問題。 – Will

+0

問題是oldFile的名稱不可用。我遵循Jarrod Roberson的建議'tmpFile = tmpFile.replace(「\」,「\\」)';但是它無法編譯。 –

+0

文件名不可用?那是什麼意思? –