File.delete не удаляет файл - PullRequest
       127

File.delete не удаляет файл

1 голос
/ 07 августа 2020

В модульном тесте я создаю файл во временной папке, после тестов я хочу их удалить.

 @After
    public void destroy() throws IOException {
        if (!new File(tempFile.toAbsolutePath().getParent().toString() + "\\file1.tmp").delete()) {
            System.out.println("file1.tmp not deleted");
        }
        if (!new File(tempFile.toAbsolutePath().getParent().toString() + "\\file2.log").delete()) {
            System.out.println("file2.log not deleted");
        }
        if (!new File(tempFile.toAbsolutePath().getParent().toString() + "\\file3.log").delete()) {
            System.out.println("file3.log not deleted");
        }
        if (!new File(tempFile.toAbsolutePath().getParent().toString() + "\\file4.log").delete()) {
            System.out.println("file4.log not deleted");
        }
    }

Он удаляет файлы 1-3 без единой проблемы, но я не удалить файл 4. Обычно File.delete должен генерировать исключение IOException, но он просто возвращает false.

Я использовал тот же метод для каждого файла, писатель закрывается после создания и записи файлов.

Надеюсь, я этого не сделал. Не забываю информацию

1 Ответ

2 голосов
/ 07 августа 2020

Обычно File.delete должен выдавать IOException, но он просто возвращает false.

Кхм ...

File.delete не выдает IOException если не удается удалить файл 1 . Он возвращает false.

Что касается того, почему не удается удалить файл, наиболее вероятными объяснениями являются:

  • Файл заблокирован, потому что что-то его открыло . Windows не позволит вам удалить файл, который заблокирован.

  • Приложение не имеет необходимого доступа (уровня ОС) для удаления файла; т.е. это проблема с правами доступа к файлу или каталогу.

Если вы хотите выяснить, почему удаление не удается, решение состоит в том, чтобы изменить свой код, чтобы использовать Path и Files.delete(Path) . Методы в Files предназначены для исключения. В этом случае в сообщении должна быть указана причина невозможности удаления.

1 - Единственное исключение, что метод задокументирован как метание, - это SecurityException, которое будет выбрано только при наличии активного SecurityManager.

...