2012-05-04 32 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

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