Как удалить файл, который используется другим потоком? - PullRequest
0 голосов
/ 01 февраля 2019

Я запускаю юнит-тест, который проверяет мои конечные точки.Когда выполняется конечная точка, она будет записывать журналы в каталог журналов.Я хочу удалить этот файл журнала после завершения модульного теста.Но я получаю следующее исключение:

 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();
}

Я не открываю этот файл в любой другой программе.Когда я пытаюсь удалить этот файл в моей основной / Java из каталога test / java, он удаляется без каких-либо проблем.Когда я даже пытаюсь прочитать из этого файла в тестовой директории, я получаю исключение java.nio.file.AccessDeniedException.

Как можно удалить этот файл журнала?

1 Ответ

0 голосов
/ 01 февраля 2019

В ОС Windows файлы, которые используются другими пользователями, заблокированы и не могут быть удалены.Единственным решением будет закрытие Reader , если вы его используете, в конце теста.

Или просто перейдите на Linux и забудьте о подобных проблемах;)

EDIT

Видимо, отключение LogManager работало на него.LogManager.shutdown()

...