そこリソースリークの警告があるが、私はそれを閉じるように見えることはできません

Nitesh Regmi:

ここでのコードは、その警告を与えますResource leak: 'f' is never closed私は近いtryブロック内でfの場合、それは動作しますが、それは私の場所ならばf.close()最終的には内側が、それは動作しませんブロックします。これは、エラーを示してf cannot be resolvedだから問題は何ですか?

プログラムは、ユーザからの入力を取得し、.docファイルに保存することになっているので、同じファイルからデータを読み込み、それをプリントアウト。それはすでに明白でなければ、私は、Javaを勉強しています。

コードの作品だから、私は警告があることに気づいfクローズされません。私が入れf.close()に声明をfinallyブロック。それはそこにエラーが表示されます。

CLOSE文は、それがであるときに実行されるtryブロックが、認識できないffinallyブロック。

try {
    RandomAccessFile f = new RandomAccessFile("E:\\emp.doc","r");
    for (i = 0; i < size; i++) {
        id1[i] = f.read();
        name[i] = f.readUTF();
        add[i] = f.readUTF();
        sal[i]=f.readDouble();

        if (sal[i] > 25000) {
            System.out.println("ID:" + id1[i] + "\nName: " + name[i] + 
"\nAddress:" + add[i] + "\nSalary" + sal[i]);
        }
    }
} catch (Exception ex) {
    ex.printStackTrace();
}//finally {
//  f.close();
//}

だから、コードで、私は置いていない場合はfinally、プログラムが動作しますが、ブロックを示し、警告f閉じていないが。

私が入れしようとした場合closeの内部でtryブロック後、警告はありません。

私は置けばしかし、close内部のfinallyブロックエラーがありますf cannot be resolved

それでは、私は警告に対処するためにしなければならないのですか?

クリス:

に変更し

try ( RandomAccessFile f = new RandomAccessFile("E:\\emp.doc","r")){
....
}

それは自動的にトライスコープ終了後に呼び出されますよう閉じる必要はありません。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=237121&siteId=1