创建最近删除的文件时AccessDeniedException

时间:2015-12-06 22:22:17

标签: java io

我正在尝试删除文件然后重新创建它。首先,我检查文件是否已经存在,然后,如果确实存在,我将其删除。然后我尝试在同一个地方创建一个具有相同名称的新文件。当我这样做时,我收到此错误:

java.nio.file.AccessDeniedException: inputLog.txt

但是,如果在运行这三个操作之前文件不存在,则创建该文件时没有问题。

这是我的代码:

final Path INPUTLOGPATH = FileSystems.getDefault().getPath("inputLog.txt");
try {
    reader = Files.newBufferedReader(INPUTLOGPATH, charset);
} catch (IOException e) {
    reader = null;
}

if (reader != null) {
    try {
        Files.delete(INPUTLOGPATH);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

try {
    Files.createFile(INPUTLOGPATH);
} catch (IOException e) {
    e.printStackTrace();
}

1 个答案:

答案 0 :(得分:1)

  

首先,我检查文件是否已经存在,然后,如果确实存在,我将其删除。

为什么呢?打开输出文件已经完成了所有这些工作。您只是重复操作系统必须完成的工作。删除所有这些。你没有关闭文件阅读器,你做错了,但它无关紧要。不要写不必要的代码。

  

然后我尝试在同一个地方创建一个名为

的新文件

如图所示,这也是不必要的。只需在需要时打开文件即可输出。

你现在拥有它:

  • 你打开文件,这是一个搜索,以及许多其他的事情
  • 您正在删除该文件,这是另一种搜索
  • 您正在创建该文件,这是另一种搜索
  • 然后大概是你打开输出文件,这需要在操作系统内部进行另一次搜索,另一次删除和另一次创建。

不要这样做。只需删除所有这些代码。它完全没有完成任何事情。

您还通过这种方法引入了各种时序窗口问题,并且您仍然必须在实际打开文件输出时处理最终的失败。