Java 创建最近删除的文件时AccessDeniedException

Java 创建最近删除的文件时AccessDeniedException,java,io,Java,Io,我正在尝试删除一个文件,然后重新创建它。首先我检查文件是否已经存在,然后,如果已经存在,我将其删除。然后,我尝试在相同的位置创建一个新文件,并使用相同的名称。当我执行此操作时,会出现以下错误: java.nio.file.AccessDeniedException: inputLog.txt 但是,如果在运行这三个操作之前该文件不存在,则创建该文件时不会出现问题 这是我的密码: final Path INPUTLOGPATH = FileSystems.getDefault().getPath

我正在尝试删除一个文件,然后重新创建它。首先我检查文件是否已经存在,然后,如果已经存在,我将其删除。然后,我尝试在相同的位置创建一个新文件,并使用相同的名称。当我执行此操作时,会出现以下错误:

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();
}
首先我检查文件是否已经存在,然后,如果已经存在,我将其删除

为什么??打开文件进行输出将完成所有这些操作。您只是在重复操作系统已经必须完成的工作。移除所有这些。不关闭文件读取器是错误的,但这与此无关。不要编写不必要的代码

然后,我尝试在相同的位置创建一个新文件,并使用相同的名称

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

正如您现在看到的:

  • 您正在打开文件,这是一个搜索,以及许多其他内容
  • 您正在删除该文件,这是另一个搜索
  • 您正在创建文件,这是另一个搜索
  • 然后,您可能正在打开文件进行输出,这需要在操作系统内部进行另一次搜索、删除和创建
不要这样做。只需删除所有这些代码。它一事无成


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

读取器初始化后,文件将从一路读取一次,删除并重新创建文件后,在程序的整个生命周期内,在程序本身重新启动之前,文件将不再使用。如果你看一下代码,当我检查文件是否已经存在时,我所做的就是引用前面所做的工作,除了检查布尔值之外,我没有做任何工作。我确实需要重新创建该文件,因为我需要该文件为空。请假设在给定代码之间存在其他代码,这不是我遇到的问题的原因,但这使我有必要使用这些代码,然后回答问题。我已经回答了问题。您没有关闭文件读取器,删除大部分或全部代码将解决眼前的问题,以及一些您没有预见到的其他问题<代码>新建FileWriter()就足够了。或者什么都没有,如果你再也没有读过这个文件。我只能对您实际发布的代码进行评论,鉴于您在此处发布的内容,我当然不准备假设它的其余部分没有bug。