[英]Reading and writing to the file using same try-with-resources
我使用的是 Java,我有一個方法可以替換configFile
中的參數值。 我使用 try-with-resources 這樣兩者都會自動關閉。 但是,我遇到了一個意想不到的行為while
循環沒有從該文件中讀取任何內容,因為在 Java 進入 try-with-resources 塊后, configFile
立即變為空。
private static boolean replaceValue(String param, String newValue) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(configFile));
BufferedWriter bw = new BufferedWriter(new FileWriter(configFile))) {
String line;
StringBuilder sb = new StringBuilder();
boolean isParamPresent = false;
while ((line = br.readLine()) != null) {
if (line.startsWith(param + configDelimiter)) {
line = line.replaceAll("(?<==).*", newValue);
isParamPresent = true;
}
sb.append(line);
sb.append("\n");
}
if (isParamPresent) {
bw.write(sb.toString());
return true;
}
}
return false;
}
如果我將代碼更改為如下所示,它會按預期工作。
if (isParamPresent) {
try (BufferedWriter bw = new BufferedWriter(new FileWriter(configFile))) {
bw.write(sb.toString());
return true;
}
我不明白是什么導致configFile
變空。 有人可以解釋什么是錯的嗎?
FileWriter(String fileName)
構造函數調用FileOutputStream(String name)
,它將append
標志設置為 false。 這意味着該文件將不會以 append 模式打開。
根據我對 windows 的測試,如果未設置 append 標志,該文件會立即被清除。 因此,在您的第一個變體中,沒有什么可讀的,因為它已被清除。 在您將內容讀入StringBuffer
后,您的第二個變體會被清除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.