Предположим, есть метод reader(){...} который считывает что-то с клавиатуры. Я вызываю его несколько раз в коде. Как в итоге закрыть поток? Если делать в самом методе reader(){...} try with resources, то в итоге при повторном вызове вылетает исключение. А взять в try with resources сам метод reader(){...} при его вызове не получается, ругается на версию java.
CilitBang
25 уровень
Закрытие потока
Решен
Комментарии (12)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
IceBergMaster
2 марта 2020, 11:53
Поток чтения с консоли системный, открывать и закрывать его это не забота программиста, но если таки закрыть, то назад уже не откроешь.
0
CilitBangPerformance QA Lead в КЕФИР!
2 марта 2020, 11:55
Но ведь если он открыт все время, пока работает программа - тоже не ок. Разве нет?
0
IceBergMaster
2 марта 2020, 12:03
Почему не ок?
0
CilitBangPerformance QA Lead в КЕФИР!
2 марта 2020, 12:05
Он жрет ресурсы
0
IceBergMaster
2 марта 2020, 12:11
Какие?
0
CilitBangPerformance QA Lead в КЕФИР!
2 марта 2020, 12:20
Которые используются во время работы? Даже тут писали все время, мол поюзал, закрой поток. А тут видимо можно и не закрывать.
0
IceBergMaster
2 марта 2020, 12:24решение
Так если работаешь с файлом, то его и нужно освобождать, вдруг кто-то другой будет его использовать, или вдруг программист будет 100 его открывать при каждом вызове метода и не закрывать.
А с консолью какие проблемы могут быть? Она одна, дважды поток не откроешь.
+2
CilitBangPerformance QA Lead в КЕФИР!
2 марта 2020, 12:36
Так, суть уловил. А если, например, я работаю с файлом? Читаю оттуда некое чота через BufferedReader in = new BufferedReader(new FileReader(path)); . И для этого у меня есть отдельный метод, который я хочу использовать несколько раз. Если я в самом методе опять сделаю try with resources, на втором вызове ведь не вылетит ошибка, потому что этот поток не системный?
0
IceBergMaster
2 марта 2020, 12:38
Не должно быть ошибок.
+1
CilitBangPerformance QA Lead в КЕФИР!
2 марта 2020, 12:43
Понял, спасибули.
0
Ksenia VolkovaJava Developer в DXCMaster
2 марта 2020, 11:51
reader создает свой поток или использует какой-то другой?
Лучше к вопросу код прикладывать.
0
CilitBangPerformance QA Lead в КЕФИР!
2 марта 2020, 11:59
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
str = reader.readLine();
Только это в try и в отдельном методе. И в итоге я не могу вызывать этот метод несколько раз, если сделаю, например
try( BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {...}
0