[英]Java write hashmap into file
這是一種方法:
private void writeToFile() {
try {
String time = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
String name = "dictionaryFile" + time + ".txt";
File dictionaryFile = new File(name);
BufferedWriter writer = new BufferedWriter(new FileWriter(dictionaryFile));
Iterator<String> it = dictionary.keySet().iterator();
while (it.hasNext()){
String line = it.next();
String entryLine = line + " -> " + dictionary.get(line);
writer.write(entryLine);
writer.close();
}
} catch(Exception e)
{
e.printStackTrace();
}
}
這是錯誤:
java.io.IOException: Stream closed
at java.io.BufferedWriter.ensureOpen(Unknown Source)
at java.io.BufferedWriter.write(Unknown Source)
at java.io.Writer.write(Unknown Source)
at WordQuizz.WordCollection.writeToFile(WordCollection.java:58)
at WordQuizz.WordCollection.actionPerformed(WordCollection.java:44)
誰能幫我解決這個問題? 如果我只是嘗試sysout打印entryLine,則沒有錯誤。 可能是我需要指定文件位置或類似的內容嗎?
問題是您有writer.close();
在while
循環中。 一旦在第一次迭代中將其關閉,就不能再寫其他任何東西,並且會拋出您看到的異常。
將調用置於while
循環后close
。 如果您使用的是Java 7+,請在try
結束時使用“ try-with-resources”語法關閉它。
為什么要在while循環的中間關閉流? 而是:
while (it.hasNext()){
String line = it.next();
String entryLine = line + " -> " + dictionary.get(line);
writer.write(entryLine);
}
writer.close();
不要在while循環的中間關閉編寫器。 如下更改您的代碼。
private void writeToFile() {
BufferedWriter writer;
try {
String time = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
String name = "dictionaryFile" + time + ".txt";
File dictionaryFile = new File(name);
writer = new BufferedWriter(new FileWriter(dictionaryFile));
Iterator<String> it = dictionary.keySet().iterator();
while (it.hasNext()) {
String line = it.next();
String entryLine = line + " -> " + dictionary.get(line);
writer.write(entryLine);
//writer.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (writer != null) {
writer.close();
}
}
}
始終在finally塊中關閉IO操作,並檢查instance是否為null。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.