java - 在单行代码片段中编写并关闭 BufferedWriter

标签 java file bufferedwriter writer

我有下面的代码片段。

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。

最佳答案

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

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

但作者本身似乎停留在 map 中。因此其他代码可以注意到: map 有一个记录器/写入器...但是其他代码应该如何知道该记录器/写入器是否仍然打开或已关闭?

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

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

关于java - 在单行代码片段中编写并关闭 BufferedWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55492745/

相关文章:

java - 执行 RPC 时 GWT SerializationException__Ljava_lang_String_2V

file - 一次更改多个文件中的html代码

java - 在 Java 中重读一个小文本文件

java - BufferedWriter - 程序执行期间流过早关闭

Java 垃圾收集器 : PSYoungGen grows by 4 GB after Full GC

java - Android SQLite 查询与 'WHERE' 选择参数不起作用

linux - 文件系统 : Kernel calls vs. 缓存

java - FileWriter不写入长度为78510的字符串

java - FileWriter 未写入其所有内容 - 如何绕过最大值?

java - Apache 服务器的 Websocket 返回 200 而不是 101