java - 在单行代码片段中写入和关闭 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
写完就关闭。
解决方案
除了使用 try-with-resources 之外,真正的答案是:不要这样做。
你看,你把一个作家放到了一张全球地图上。这使得可以访问该地图的“整个”世界都可以使用它。接下来,一些代码打算关闭您添加到该地图的编写器。
但似乎作家本身就停留在地图上。所以其他代码可以注意到:地图有一个记录器/写入器......但是其他代码应该如何知道该记录器/写入器是否仍然打开或关闭?
在该全局地图中有一个记录器/写入器,但它不能在全局范围内使用,这本身就是一个矛盾!
换句话说:从概念上讲,您所做的似乎是错误的。要么您将这样的记录器/写入器添加到全局映射,然后所有有权访问该映射的代码都应该能够使用该记录器/写入器(不用担心“它仍然打开吗?”)。或者,您不会将记录器/写入器放在这样的全局映射中。
推荐阅读
- c# - 转换带两个小数点的双精度
- reactjs - 如何使用 React Highcharts 显示图表的菜单?
- javascript - 重用相同的视图和逻辑只是改变 VUE 中的端点
- matlab - 如何在 MATLAB 中找到两个灰度图像之间的相似性?
- php - 从一种形式导航到另一种形式时,css中的背景颜色不起作用
- google-maps - 如何在 react-native 或 android 中显示转弯导航
- javascript - 在 onclick 事件中定义的标签,例如“javascript:bSubmitted=true”
- c - 与 Emscripten 一起使用时,SDL_Delay 会停止渲染?
- ios - CADisplayLink 回调是否总是在主线程上运行?
- laravel - SQLSTATE [42000]:语法错误或访问冲突:Laravel 中的 1064 和 MariaDB 迁移中的错误