Top.Mail.Ru
Unicorn with delicious cookie
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V6128. Using a Closeable object...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V6128. Using a Closeable object after it was closed can lead to an exception.

20 Май 2025

Анализатор обнаружил вызов метода объекта, у которого ранее был вызван метод close. Подобные действия могут привести к выбрасыванию исключения.

Рассмотрим пример:

public void appendFileInformation(String path) throws IOException {
    FileInputStream is = new FileInputStream(path);
    // ....
    is.close();
    // ....
    if (is.available() == 0) {
        System.out.println("EOF");
    }
    // ....
}

В условии проверяется, что файл был прочитан полностью. Для проверки сравнивают количество оставшихся байтов с нулём. Проблема в том, что при вызове метода available будет выброшено исключение типа IOException с сообщением Stream Closed. Это связано с тем, что перед условием у переменной is вызывается метод close. Следовательно, ресурсы is будут освобождены.

Рассмотрим корректную реализацию appendFileInformation:

public void appendFileInformation(String path) throws IOException {
    try (FileInputStream is = new FileInputStream("out.txt")) {
        // ....
        if (is.available() == 0) {
            System.out.println("EOF");
        }
        // ....
    }
}

Для корректной работы метода стоит использовать try-with-resources. В этом случае:

  • ресурсы объекта is будут автоматически освобождены после выхода из тела try;
  • вне тела try обратиться к объекту не получится — это даёт дополнительную защиту от исключений типа IOException;
  • даже если в теле try возникнет исключение, ресурсы всё равно будут освобождены.

Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки управления динамической памятью (выделения, освобождения, использования освобожденной памяти).

Данная диагностика классифицируется как:

close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
close form
Я хочу принять участие в тестировании
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок:

  • Промоакции
  • Оповещения
  • Спам