Надо ли закрывать поток ввода/вывода или он закрывается автоматически?
Рекомендуется использовать  try-with-resources 
try (BufferedReader reader =
                     new BufferedReader(new InputStreamReader(System.in))) {
            String file = reader.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }

В таком случае ресурсы освободяться правильно
В первом случае потоки существуют до ближайшей сборки мусора. Но это плохая практика.