0

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

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 资源管理器)并且没有临时文件。只有原始文件。

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

谢谢

4

3 回答 3

1

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

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

所以它不会显示重命名的绝对路径。

于 2013-05-14T09:12:04.910 回答
1

删除前有一个缺失reader.close()可能为我们编辑了。你也可以这样做:

tempFile.renameTo(originialFile);
于 2013-05-14T09:28:51.740 回答
0

你检查过 renameTo() 的返回值吗?我怀疑是假的。

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

使用Files.move可能会更好

于 2013-05-14T09:17:15.657 回答