2

簡単なファイルの読み取りと書き込み機能があります。

private void WriteToFile(String filename, String val) {
    PrintWriter outStream = null;
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(filename);
        outStream = new PrintWriter(new OutputStreamWriter(fos));
        outStream.print(val);
        outStream.close();
    } catch (Exception e) {
        if (outStream != null) {
            outStream.close();
        }
    }
}

private String ReadFile(String filename) {
    String output = "";
    FileReader fr = null;
    BufferedReader br = null;
    try {
        fr = new FileReader(filename);
        br = new BufferedReader(fr);
        output = br.readLine();
        br.close();
    } catch (Exception e) {
        if (br != null) {
            br.close();
        }
    }

    return output;
}

構築すると、次のようになります。

unreported exception java.io.IOException; must be caught or declared to be thrown
            br.close();
                    ^

br.closeをキャッチする必要があるのに、WriteToFileのclose()について文句を言わないのはなぜですか?

4

4 に答える 4

8

java.io.PrintWriterのソースコードから取得:

public void close() {
    try {
        synchronized (lock) {
            if (out == null)
                return;
            out.close();
            out = null;
        }
    }
    catch (IOException x) {
        trouble = true;
    }
}

IOExceptionは、PrintWriterのclose()メソッド内で食い尽くされました

java.io.BufferedReaderのソースコードから:

public void close() throws IOException {
    synchronized (lock) {
        if (in == null)
            return;
        in.close();
        in = null;
        cb = null;
    }
}

BufferedReaderはIOExceptionをスローします。

それはあなたの質問に答えるはずです。

于 2012-06-08T18:24:38.840 に答える
5

br.closeをキャッチする必要があるのに、WriteToFileのclose()について文句を言わないのはなぜですか?

これについては、Javaドキュメントを確認できます。BufferedReaderclose()メソッド:

public void close()
           throws IOException

そして、PrintWriterclose()のメソッド:

public void close()

その答えは、JVMが文句を言わない理由についてのあなたの質問です。メソッドのシグネチャから明らかだからです。

于 2012-06-08T18:24:17.780 に答える
2

PrinterWriter.close()例外をスローしません。を呼び出すとfos.close()、例外をキャッチ/スローするように求められます。

于 2012-06-08T18:23:23.523 に答える
1

PrintWriter.java内。例外がキャッチされ、処理されます。したがって、使用中にそれをキャッチする必要はありません。

Javaソース:

 public void close() {
        try {
            synchronized (lock) {
                if (out == null)
                    return;
                out.close();
                out = null;
            }
        }
        catch (IOException x) {
            trouble = true;
        }
    }

ただし、BufferedReaderでは例外がスローされます。したがって、使用するときにそれをキャッチする必要があります。

Javaソース:

  public void close() throws IOException {
            synchronized (lock) {
                if (in == null)
                    return;
                in.close();
                in = null;
                cb = null;
            }
        }
于 2012-06-08T18:28:01.793 に答える