写作后我正在写文件和关闭流。最后我要删除文件。 但是程序执行完成后我仍然可以找到文件。它的多线程环境。
那么可以检查它正被哪个函数或哪个线程使用?
更新了代码:
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());
}
}
由于
答案 0 :(得分:1)
在Linux / Unix环境中lsof
是你的朋友。对于Windows Process Explorer可以帮助您找到保存文件句柄的进程。
答案 1 :(得分:0)
如果我理解正确,那么代码的和平就会被许多线程同时执行。 在这种情况下,许多线程可以同时创建,打开,删除同一文件,即一个线程当前正在写入文件,第二个线程尝试删除该文件。然后可能会发生删除文件的操作失败。
要防止对同一文件的并发访问,您可以同步代码(请参阅synchronize关键字),也可以生成单独的唯一文件名,例如查看this question的答案。