簡體   English   中英

Java將哈希圖寫入文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM