1

以下のコードをコンパイルすると、「シンボル変数が見つかりません」というエラーが表示されますが、finally ブロックのコードをコメントにすると、正常にコンパイルできます。

お知らせ下さい。

public static int writeFile (String p_file_path, String p_data) throws Exception 
{
  try {
    FileWriter outFile = new FileWriter(p_file_path,true);
    PrintWriter out = new PrintWriter(outFile);
    out.println(p_data);
  } catch (Exception  e) {
  } finally {
    out.close();
  }
  return SUCCESS;
}
4

2 に答える 2

10

finally ブロックで参照したい場合は、try ブロックの外で "out" を定義する必要があります。

PrintWriter out = null;
try
{
    FileWriter outFile = new FileWriter(p_file_path,true);
    out = new PrintWriter(outFile);
    out.println(p_data);
}
finally
{
    if (out != null)
        out.close();
}
于 2012-04-15T23:55:39.310 に答える
3

ブロックout内で宣言します。tryこれは、ステートメントのtry一部を離れるとすぐに範囲外になることを意味します。try-finallyステートメントの外で宣言しtryてブロック内で null チェックを行うか、finallyJava 7 のtry-with-resourcesステートメントを使用することができます。

PrintWriter out;
try {
    out = ...
} finally {
    if(out != null) {
        out.close();
    }
}

また

try(PrintWriter out = ...) {
}
于 2012-04-15T23:56:22.050 に答える