用单行代码片段编写和关闭BufferedWriter

时间:2019-04-03 10:18:27

标签: java file bufferedwriter writer

我在代码段下面。

BufferedWriter

有什么方法可以执行单行代码的最后两行中的两种功能吗?我的意思是在写完之后关闭{{1}}。

5 个答案:

答案 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可以自动关闭资源,而无需显式关闭资源。