我在代码段下面。
BufferedWriter
有什么方法可以执行单行代码的最后两行中的两种功能吗?我的意思是在写完之后关闭{{1}}。
答案 0 :(得分:1)
除了使用try-with-resources之外,真正的答案是:不这样做。
您看到的是,您将作家置于全球地图中。这使其可以访问具有该地图的“整个”世界。接下来, some 代码打算关闭您添加到该地图的编写器。
但是似乎作者本身在地图上正在停留。因此,其他代码可以注意到:该地图上有一个记录器/记录器...但是,其他代码应该如何知道该记录器/记录器是打开还是关闭了?
在该全局地图中有一个记录器/记录器,但不能在全局中使用,这本身就是一个矛盾!
换句话说:从概念上讲,您在做什么似乎是错误的。您可以将这样的记录器/记录器添加到全局地图,然后有权访问该地图的所有代码应能够使用该记录器/记录器(不必担心“它是否仍在打开?”)。或者,您不将记录器/记录器放置在这样的全局图中。
答案 1 :(得分:0)
很简单,是
((BufferedWriter) globalMap.get("Logger")).write("I'm Writing"); ((BufferedWriter) globalMap.get("Logger")).close();
如果您的意思是使用单个方法调用来完成这两项操作,则除非您定义一个新方法才能这样做。
答案 2 :(得分:0)
您可以尝试使用try-catch with resources
。这意味着将在完成try block
之后自动关闭资源。您可以在这里https://www.baeldung.com/java-try-with-resources
try(Writer talendLogFileWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(talendLogFile, true)))) {
globalMap.put("Logger", talendLogFileWriter);
((BufferedWriter) globalMap.get("Logger")).write("I'm Writing");
}catch(Exception ignored){} //handle the exception if you want
答案 3 :(得分:0)
您可以获得的最接近的是,但是正如许多其他人已经提到的那样,没有必要。它只会使事情复杂化:
try (BufferedWriter bw = (BufferedWriter) globalMap.get("Logger")) {
bw.write("I'm Writing");
}
答案 4 :(得分:0)
对资源使用try可以自动关闭资源,而无需显式关闭资源。