2010-12-13 15 views
4

私は、Windows XP上で動作するJavaプログラムを持っています。ファイルを読み込んでファイルを閉じるか、それとも少なくともそれが行うべきことです。Javaプログラムがファイルのハンドルを開いたままにしているかどうかをチェックする方法?

ときどきファイルがロックされたままになることがあります(「私」とは私がユーザとして私を意味し、コマンドプロンプトからcopy file2.out file1.outを実行しようとしています.は私のJavaプログラムが読むファイルです) Javaプログラム。 (Windowsは「マップされたユーザープロセスを使ってファイルに書き込めない」などの文句を言う)

デバッグ方法はありますか?私は困惑している。


明確化:私がいる問題は、ファイルが開いたままにされている、またはそれは開いたままにされていたプロセスによってかどうかを考え出すされていません。問題は、大きなプログラムであり、InputStreamが開かれている間にいくつかのクラスがファイルInputStreamにアクセスできるため、Javaプログラムのどこでファイルを正しく閉じていないかを調べることです。

私はいくつかのクラスに絞り込むことができますが、次にどこを見るかは分かりません。

答えて

4

チェックアウト可能なSysinternals Process Explorerは、どのプロセスがファイルハンドルに対してロックを保持しているかをデバッグできる優れたツールです。メインメニューでFind -> Find Handle or DLL ...をクリックし、ファイルの名前を入力します。ロックを保持しているプロセスが表示されます。

あなたのJavaプログラムに関する限り、例外がスローされたとしても(常にfinallyステートメント内にある)、ファイルハンドルを常に閉じるようにしてください。

0

FindBugsは、これらの種類のバグや他の多くのものを見つけるのに最適です。

+0

これは当然のことですが、プロセスのもう一方の端点、つまりソースに一般的な問題がないかどうかを確認します。 –