java - 如何删除另一个线程正在使用的文件?
问题描述
我运行一个单元测试来检查我的端点。执行端点时,它将日志写入日志目录。我想在单元测试完成后删除这个日志文件。但我得到以下异常:
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。
怎么可能删除这个日志文件?
解决方案
在 Windows 操作系统中,其他用户正在使用的文件被锁定且无法删除。唯一的解决方案是在测试结束时关闭Reader(如果您正在使用)。
或者只是转移到 Linux 并忘记这类问题;)
编辑
显然关闭 LogManager 对他有用。
LogManager.shutdown()
推荐阅读
- python-3.x - 在 k-means Python 中更新质心
- json - 如何使用 laravel api URL 显示 amchart 4
- rest - 在设计 API 时,坚持适当的 HTTP 请求类型有多重要?
- java - 如何在 Java 中字符串化或使用教科书式数学
- javascript - Javascript替换正则表达式使用
- django - DATA_UPLOAD_MAX_MEMORY_SIZE 的计量单位
- macos - 在功能中设置地图路线时 Mac 应用程序崩溃
- python - TensorFlow 数据集的使用
- python - 将运行小计添加到创建的食物菜单
- angular - 如何从观察者的处理程序中访问组件属性?