如何删除另一个线程正在使用的文件?

时间:2019-02-01 13:58:43

标签: java io nio

我运行一个检查终端的单元测试。执行端点时,它将把日志写入日志目录。我想在单元测试完成后删除此日志文件。但是我收到以下异常:

 java.nio.file.FileSystemException: C:\Users\dev\IdeaProjects\users\src\main\resources\log\events The process cannot access the file, as this file is being used by another process.

我有以下方法:

public static void deleteLogDir() throws IOException {
     String logEventPath = System.getProperty("user.dir") +  "/users/src/main/resources/log/events";
     Path path = Paths.get(logEventPath);
     Files.list(path).forEach(e -> {
            try {
                  Files.deleteIfExists(e);
                } catch (IOException e1) {
                   e1.printStackTrace();
                }
     });
}


@AfterAll
public static void clear() throws IOException {
     deleteLogDir();
}

我没有在任何其他程序中打开此文件。当我尝试从test / java目录中删除main / java中的该文件时,将其删除,没有任何问题。当我什至尝试从测试目录中的该文件读取时,都会得到java.nio.file.AccessDeniedException。

如何可以删除此日志文件?

1 个答案:

答案 0 :(得分:2)

在Windows操作系统中,其他用户正在使用的文件被锁定,并且无法删除。 唯一的解决方案是在测试结束时关闭 Reader (如果您正在使用的话)。

或者只是转而使用Linux并忘记这种问题;)

编辑

显然,关闭LogManager对他有用。 LogManager.shutdown()