Java 使用PrintWriter打印数组

Java 使用PrintWriter打印数组,java,arrays,printstream,Java,Arrays,Printstream,我有一个名为directory的数组,其中包含许多directoryEntry,每个directoryEntry由一个name和telno组成。现在我需要将目录中的每个目录条目打印到文本文件中。 这是我尝试过的方法,但是我得到了错误:未报告的异常IOException;必须被抓住或宣布被抛出 我的代码: public void save() { PrintWriter pw = new PrintWriter(new FileWriter("directory.txt", true));

我有一个名为directory的数组,其中包含许多directoryEntry,每个directoryEntry由一个name和telno组成。现在我需要将目录中的每个目录条目打印到文本文件中。 这是我尝试过的方法,但是我得到了错误:未报告的异常IOException;必须被抓住或宣布被抛出

我的代码:

public void save() {
    PrintWriter pw = new PrintWriter(new FileWriter("directory.txt", true)); 

    for (DirectoryEntry x : theDirectory) {
        pw.write(x.getName());
        pw.write(x.getNumber());
        pw.close();
    }
}

在此问题上的任何帮助都将不胜感激

修改后的代码应如下所示:

  public void save() {

PrintWriter pw=null;
    try{
        pw = new PrintWriter(new FileWriter("directory.txt", true)); 

        for (DirectoryEntry x : theDirectory) {
            pw.write(x.getName());
            pw.write(x.getNumber());

        }

    }
    catch(IOException e)
    {
     e.printStackTrace();
    }

finally
{
   pw.close();
}

    }

正如Jon Skeet所提到的,这里的其他答案有一些缺陷,如果您使用Java 7或更高版本,这可能就是您想要的:

public void save() {
    try (PrintWriter pw = new PrintWriter(new FileWriter("directory.txt", true))) {         
        for (DirectoryEntry x : theDirectory) {
            pw.write(x.getName());
            pw.write(x.getNumber());                
        }
    }
    catch (IOException ex)
    {
        // handle the exception
    }   
}

您了解已检查的异常吗?另请阅读注意,您应该使用try with resources语句或try/finally语句在结尾关闭您的编写器,而不是在循环中。@JonSkeet我现在将阅读这些内容,谢谢。是的,它也会运行良好,但您所说的很好。谢谢,我已经修改了我的答案。我绝不会建议像那样使用
catch(Exception)
。。。我们不知道OP是否应该声明他们的方法可以抛出IOException。。。至少它应该捕获IOException。(我也不会使用FileWriter或PrintWriter,但是…@Jon Skeet,通常我会处理大多数异常,但实际上我忘了提到PrintWriter类的IOException异常。你是说你经常捕获
异常
?哎呀@Jon Skeet,是的,我不记得大多数异常是由语句引发的,所以我从IDE(Eclipse)获得帮助,或者我通常使用异常。