Создание объекта потока ввода-вывода - PullRequest
1 голос
/ 13 июля 2011

Я запустил FindBugs, чтобы проверить мой код, и он жалуется, что метод не может закрыть поток:

Properties prop = new Properties();
prop.load(new FileInputStream("file.txt"));
...

Это ошибка или просто ложное срабатывание?Будет ли этот поток правильно закрыт?

Ответы [ 2 ]

4 голосов
/ 13 июля 2011

Потоковая обработка утомительна (до Java 7).Перед этим вы должны вручную закрыть поток.

InputStream is = null;
try {
   is = new FileInputStream(..);
   // do something with stream
} finally {
   try {
      is.close();
   } catch (Exception ex){ 
      //report problem
   }
}

apache commons-lang может сократить предложение finally на IOUtils.closeQuitely(is), но учтите, что оно скрывает исключение

2 голосов
/ 13 июля 2011

FindBugs является верным, поток останется открытым (по крайней мере, до конца программы или она будет собирать мусор).Поток, передаваемый методу load(), не закрыт, как указано в API.

См .: http://download.oracle.com/javase/6/docs/api/java/util/Properties.html#load%28java.io.InputStream%29

...