Java 8-如何关闭动态创建的BufferedReader?

时间:2018-12-15 18:09:58

标签: java file java-8 bufferedreader inputstreamreader

我有以下方法:

private List<String> readFile() {
    List<String> strings = new ArrayList<>();
    try {
      Resource resource = new ClassPathResource("resource.file");
      passwords = new BufferedReader(new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8)).lines().collect(
        Collectors.toList());
    }
    catch (IOException e) {
      logger.error("Error while reading file", e);
    }
    return strings;
  }

我需要关闭流吗?如果是,怎么办?

2 个答案:

答案 0 :(得分:3)

BufferedReader是一种资源,程序完成后必须将其关闭。

尝试使用资源

try (BufferedReader br = 
      new BufferedReader(new InputStreamReader(resource.getInputStream(), 
              StandardCharsets.UTF_8))) {    
    passwords = br.lines().collect(Collectors.toList());    
} catch (IOException e) { e.printStackTrace();}

from the doc:

  

try-with-resources语句是一个try语句,它声明一个   或更多资源。资源是必须在之后关闭的对象   程序完成。 try-with-resources语句   确保在语句末尾关闭每个资源。任何   实现java.lang.AutoCloseable的对象,其中包括所有   实现java.io.Closeable的对象可以用作资源。

强调我。

答案 1 :(得分:0)

在这种情况下,Java具有一种称为try-with-ressources的强大机制,它看起来像=

Try(InputStream是= new InputStream(System.In)),它将在try语句为^^

后为您关闭

为了更好地理解英语,我只是用google(尝试使用ressources java)。