[英]Write and close BufferedWriter in single line code snippet
我在下面的代碼段中。
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-與資源,真正的答案是: 不要做這種方式。
您會看到,您將作家置於全球地圖中。 這使其可以訪問具有該地圖的“整個”世界。 接下來, 一些代碼打算關閉您添加到該地圖的編寫器。
但是似乎作者本身就停留在地圖上。 因此,其他代碼可以注意到:地圖上有一個記錄器/記錄器...但是,其他代碼應該如何知道該記錄器/記錄器是打開還是關閉了呢?
在該全球地圖中有一個記錄器/記錄器,但不能在全球范圍內使用,這本身就是一個矛盾!
換句話說:從概念上講,您在做什么似乎是錯誤的。 要么將這樣一個記錄器/編寫器添加到全局地圖,然后所有有權訪問該地圖的代碼都應該能夠使用該記錄器/編寫器(不必擔心“它是否仍在打開?”)。 或者,你不把記錄器/作家在這樣一個全球性的地圖。
平凡,是的:
((BufferedWriter) globalMap.get("Logger")).write("I'm Writing"); ((BufferedWriter) globalMap.get("Logger")).close();
如果您的意思是使用單個方法調用來完成這兩項操作,那么除非您定義一個新方法才能這樣做。
您可以嘗試對try-catch with resources
使用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
您可以得到的最接近的是這種方法,但是正如許多其他人已經提到的那樣,沒有必要這樣做。 它只會使事情復雜化:
try (BufferedWriter bw = (BufferedWriter) globalMap.get("Logger")) {
bw.write("I'm Writing");
}
對資源使用try可以自動關閉資源,而無需顯式關閉它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.