-4

我想从此代码中删除异常处理程序,因为我不明白它存在的原因,并且我相信它在我的代码阶段没有做任何事情。我有这个:

public void ToFile(){
               try{
                   PrintWriter pw = new PrintWriter(new FileWriter(file, false));

                    for (String st:stringarray){ 
                          pw.println(st);
                          pw.close();
                            }
                    }catch(Exception exception)
                    {}
            }

当我删除异常部分时,我将其转换为这个,但它给了我错误......:

public void ToFile(){

                            PrintWriter pw = new PrintWriter();
                            for (String st:items){ 
                                    pw.println(srtingarray);
                                    pw.close();
                            }

            }

我应该怎么办 ? 编辑错误:没有为 PrintWriter 找到合适的构造函数。

4

3 回答 3

3

尝试这样的事情:

public void toFile() throws IOException {
    PrintWriter pw = new PrintWriter(new FileWriter(file, false));

    for (String str: items){ 
        pw.println(str);
    }

    pw.close();
}

写入失败时使用 aPrintWriter可以生成s。IOException您可以在函数中捕获并处理它们,或者添加一个throws允许异常向上传播到调用者的子句。

(我还把close()调用移到了循环之外,并修正了你的使用方式pw。)

知道添加throws子句并不能完全解决您的问题,因为调用者仍需要处理异常。它只是将问题提升了一个级别。不过,这是正确的做法。没有办法完全忽略IOException. 这些函数可能会出错,Java 会强制您在某个时候处理这​​些错误。这是一件好事

如果您想在这里处理异常,您可以这样做。在子句中做一些事情是个好主意。catch看到catch(Exception e) { }一个空的处理程序让婴儿 Knuth 伤心。

public void toFile() {
    try {
        PrintWriter pw = new PrintWriter(new FileWriter(file, false));

        for (String str: items){ 
            pw.println(str);
        }

        pw.close();
    }
    catch (IOException exception) {
        exception.printStackTrace();
    }
}
于 2012-10-25T03:09:10.570 回答
3

异常处理程序正在“处理” 1new FileWriter(file, false)无法打开文件时可能引发的 IOException 。如果你不打算处理它,你必须在方法签名中声明它:

public void toFile() throws IOException {
    PrintWriter pw = new PrintWriter(new FileWriter(file, false));
    for (String st : items) { 
        pw.println(st);
    }
    pw.close();
}

我还借此机会修复了方法名称。永远不要以大写字母开头的方法名称。这是一个重大的风格错误。

我修复了另外 2 个编译错误和一个错误。(看看你是否能发现它......并找出它为什么是一个错误。)

最后,真正正确的写法是:

// Java 7
public void toFile() throws IOException {
    try (PrintWriter pw = new PrintWriter(new FileWriter(file, false))) {
        for (String st : items) { 
            pw.println(st);
        }
    }
}

或者

// pre-Java 7
public void toFile() throws IOException {
    PrintWriter pw = new PrintWriter(new FileWriter(file, false))) {
    try {
        for (String st : items) { 
            pw.println(st);
        }
    } finally {
        pw.close();
    }
}

您需要这样做以便FileWriter总是关闭......即使在循环中引发了意外异常。


1 - 事实上,原版catch (Exception exception) { }真的很糟糕。首先,它只是狼吞虎咽地吃掉异常,什么也没说。其次,它是为了Exception……而这样做的,其中包括一大堆这样的异常NullPointerException,很可能是错误的证据。不要压制异常,尤其不要尝试Exception像那样“处理”。

于 2012-10-25T03:09:18.380 回答
0

异常的原因是在循环的第一次迭代之后,您将关闭 PrintWriter 对象。

于 2012-10-25T03:06:46.567 回答