首页 > 解决方案 > 如何删除另一个线程正在使用的文件?

问题描述

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

 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。

怎么可能删除这个日志文件?

标签: javaionio

解决方案


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

或者只是转移到 Linux 并忘记这类问题;)

编辑

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


推荐阅读