0

私はファイルを書き込んでおり、書き込み後にストリームを閉じています。最後に、ファイルを削除しています。しかし、プログラムの実行が完了した後でもファイルを見つけることができます。そのマルチスレッド環境。

どの関数またはどのスレッドで使用されているかを確認することは可能ですか?

コードで更新:

 File p_file = new File("C:\\", "GUID");
 p_file.createNewFile();

 FileOutputStream fos = null;
try {
  fos = new FileOutputStream(p_file);
  fos.write("This is test msg.".getBytes());
} finally {
  try {
         fos.close();
      } catch (IOException e) {
                e.printStackTrace();
      }
      if(p_file.exists())
   System.out.println(p_file.delete());
}
}

ありがとう

4

2 に答える 2

1

Linux/Unix 環境lsofでは友達です。Windowsの場合、 Process Explorerは、ファイルへのハンドルを保持しているプロセスを見つけるのに役立ちます。

于 2012-10-09T09:27:55.050 に答える
0

私が正しく理解していれば、このコードの平和は多くのスレッドによって同時に実行されます。この場合、多くのスレッドが同じファイルを同時に作成、開く、削除する可能性があります。つまり、1つのスレッドが現在ファイルに書き込みを行っており、2番目のスレッドがファイルを削除しようとします。その後、ファイルを削除する操作が失敗する可能性があります。

同じファイルへの同時アクセスを防ぐために、コードを同期するか(synchronizeキーワードを参照)、別の一意のファイル名を生成することができます。たとえば、この質問への回答を参照してください。

于 2012-10-09T11:49:23.440 に答える