Функция Properties.load закроет InputStream?

Я видел этот пример , и я не видел close()метод, вызываемый на нем InputStream, поэтому бы prop.load()закрыть поток автоматически? Или есть ошибка в примере?

java,properties,inputstream,java-io,

2

Ответов: 3


4 принят

Поток не закрыт после Properties.load ()

public static void main(String[] args) throws IOException {

    InputStream in = new FileInputStream(new File("abc.properties"));

    new Properties().load(in);

    System.out.println(in.read());
}

Вышеприведенный код возвращает «-1», поэтому поток не закрыт. В противном случае это должно было быть брошеноjava.io.IOException: Stream Closed


2

Почему вы спрашиваете, когда это Properties.load(InputStream inStream)говорит javadoc ?

Указанный поток остается открытым после возвращения этого метода.

Он говорил, что с Java 6.

Как сказал EJP в комментарии : Не полагайтесь на произвольный интернет-мусор. Используйте официальную документацию Oracle Java в качестве основного источника информации.


0

Если вы используете Java 7 или более позднюю версию, вы можете использовать try-with-resources . Статья от Oracle здесь: http://www.oracle.com/technetwork/articles/java/trywithresources-401775.html .

Любой ресурс, объявленный в открытии блока try, будет закрыт. Следовательно, новая конструкция защищает вас от необходимости связывать блоки try с соответствующими блоками finally, которые предназначены для правильного управления ресурсами.

Следующее закроет InputStream автоматически (вы можете добавить catch и, наконец , если вам это нужно):

try (InputStream is = new FileInputStream("properties.txt")) {
    // is will be closed automatically
}
Java, свойства, InputStream, Java-IO,
Похожие вопросы