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 ,进程资源管理器可以帮助您找到持有文件句柄的进程。

于 2012-10-09T09:27:55.050 回答
0

如果我理解正确的话,这种代码的和平是由许多线程同时执行的。在这种情况下,许多线程可能会同时创建、打开、删除同一个文件,即一个线程当前正在写入该文件,而另一个线程试图删除该文件。然后可能会发生删除文件的操作失败。

为了防止对同一个文件的并发访问,您可以同步您的代码(参见 synchronize 关键字),或者您可以生成一个单独的唯一文件名,例如参见此问题的答案。

于 2012-10-09T11:49:23.440 回答