首页 > 解决方案 > 在单行代码片段中写入和关闭 BufferedWriter

问题描述

我有下面的代码片段。

Map<String, Object> globalMap = new HashMap<String,Object>();
File talendLogFile = new File("C:\\Softwares\\logFiles\\error.log");
Writer talendLogFileWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(talendLogFile, true)));

globalMap.put("Logger", talendLogFileWriter);

((BufferedWriter) globalMap.get("Logger")).write("I'm Writing");
((BufferedWriter) globalMap.get("Logger")).close();

有什么方法可以在单行代码中执行最后两行中发生的两种功能?我的意思是BufferedWriter写完就关闭。

标签: javafilebufferedwriterwriter

解决方案


除了使用 try-with-resources 之外,真正的答案是:要这样做。

你看,你把一个作家放到了一张全球地图上。这使得可以访问该地图的“整个”世界都可以使用它。接下来,一些代码打算关闭您添加到该地图的编写器。

但似乎作家本身就停留在地图上。所以其他代码可以注意到:地图有一个记录器/写入器......但是其他代码应该如何知道该记录器/写入器是否仍然打开或关闭?

在该全局地图中有一个记录器/写入器,但它不能在全局范围内使用,这本身就是一个矛盾!

换句话说:从概念上讲,您所做的似乎是错误的。要么您将这样的记录器/写入器添加到全局映射,然后所有有权访问该映射的代码都应该能够使用该记录器/写入器(不用担心“它仍然打开吗?”)。或者,您不会将记录器/写入器放在这样的全局映射中。


推荐阅读