重命名后,tempfile给出错误的绝对路径

时间:2013-05-14 09:04:27

标签: java file

我正在更改文件的内容,因此我逐行读取文件,替换我想要的内容并逐行写入临时文件。处理整个文件时,我删除原始文件,并将tempfile重命名为原始文件名。 像这样

File orginialFile = new File("C:\\java\\workspace\\original.xml");
File tempFile = File.createTempFile("tempfile", ".tmp", new File(C:\\java\\workspace\\"));
while ((str_String = reader.readLine()) != null) {
//read lines and replace and write lines
}
orginialFile .delete();     
tempFile.renameTo(new File("C:\\java\\workspace\\original.xml"));

完成此操作后,我请求临时文件的绝对路径(tempFile.getAbsolutePath();)。但这给了我 c:\ java \ workspace \ tempfile3729727953777802965.tmp(数字改变程序的每次运行)而不是c:\ java \ workspace \ original.xml

为什么?

我调试了它,就在我请求绝对路径之前,我检查了c:\ java \ workspace(windows explorer)并且没有临时文件。只有原始文件。

所以这个过程运行正常,我只是想知道为什么它没有显示重命名的绝对路径。 (我会用它来记录)

THX

3 个答案:

答案 0 :(得分:1)

java.io.File的文档中,java.nio.file包的互操作性之前:

  

File类的实例是不可变的;也就是说,一旦创建,File对象表示的抽象路径名永远不会改变。

因此它不会显示重命名的绝对路径。

答案 1 :(得分:1)

删除前缺少reader.close()可能为我们编辑过。您也可以这样做:

tempFile.renameTo(originialFile);

答案 2 :(得分:0)

您是否检查过renameTo()的返回值?我怀疑这是假的。

另请注意api documentation。它指出很多事情都可能出错 - 例如在文件系统之间移动。

使用Files.move

可能会更好
相关问题