Java将hashmap写入文件

Java将hashmap写入文件,java,Java,以下是一种方法: private void writeToFile() { try { String time = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime()); String name = "dictionaryFile" + time + ".txt"; File dictionaryFile = new File(nam

以下是一种方法:

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();
    }

}

有人能帮我解决这个问题吗?如果我只是尝试sysout打印entryLine,那么就没有错误。可能是我需要指定文件位置或类似的东西???

问题是您有
writer.close()
中,而
循环。一旦它在第一次迭代中关闭,就不能编写任何其他内容,并且会抛出您看到的异常


while
循环之后调用
close
。如果您使用的是Java 7+,则在
try
结束时使用关闭它。

问题在于您有
writer.close()
中,而
循环。一旦它在第一次迭代中关闭,就不能编写任何其他内容,并且会抛出您看到的异常


while
循环之后调用
close
。如果你使用java 7 +,那么当<<代码>尝试< /COD>结束时,使用它关闭它。

为什么你要在while循环中关闭你的流?而是:

while (it.hasNext()){
            String line = it.next();
            String entryLine = line + " -> " + dictionary.get(line);
            writer.write(entryLine);
}

writer.close();

为什么你要在你的while循环中间关闭你的流?而是:

while (it.hasNext()){
            String line = it.next();
            String entryLine = line + " -> " + dictionary.get(line);
            writer.write(entryLine);
}

writer.close();

不要在while循环中间关闭writer。更改您的代码如下

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();
       }
    }
}
private void writeToFile(){
缓冲写作者;
试一试{
字符串时间=新的SimpleDataFormat(“yyyyMMdd_HHmmss”).format(Calendar.getInstance().getTime());
String name=“dictionaryFile”+time+“.txt”;
文件字典File=新文件(名称);
writer=newbufferedwriter(newfilewriter(dictionaryFile));
迭代器it=dictionary.keySet().Iterator();
while(it.hasNext()){
String line=it.next();
字符串entryLine=line+“->”+dictionary.get(line);
writer.write(entryLine);
//writer.close();
}
}捕获(例外e){
e、 printStackTrace();
}最后{
if(writer!=null){
writer.close();
}
}
}

始终在finally块中关闭IO操作,并检查实例是否不为null。

不要在while循环中间关闭writer。更改您的代码如下

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();
       }
    }
}
private void writeToFile(){
缓冲写作者;
试一试{
字符串时间=新的SimpleDataFormat(“yyyyMMdd_HHmmss”).format(Calendar.getInstance().getTime());
String name=“dictionaryFile”+time+“.txt”;
文件字典File=新文件(名称);
writer=newbufferedwriter(newfilewriter(dictionaryFile));
迭代器it=dictionary.keySet().Iterator();
while(it.hasNext()){
String line=it.next();
字符串entryLine=line+“->”+dictionary.get(line);
writer.write(entryLine);
//writer.close();
}
}捕获(例外e){
e、 printStackTrace();
}最后{
if(writer!=null){
writer.close();
}
}
}
始终关闭finally块中的IO操作,并检查实例是否不为null