我有一个在Windows XP 下运行的Java 程序。它读取一个文件并关闭该文件,或者至少这是它应该做的事情。
有时,文件保持锁定状态,我无法写入它(“I”意味着我作为用户,尝试copy file2.out file1.out从命令提示符执行,file1.out我的 Java 程序读取的文件在哪里),直到我关闭 Java 程序。(Windows 抱怨“无法使用映射的用户进程写入文件”或类似的内容)
关于如何调试有什么建议吗?我很困惑。
澄清:我遇到的问题不是弄清楚文件是否保持打开状态,或者通过哪个进程保持打开状态。问题是找出我的 Java 程序中的哪个位置没有正确关闭文件,因为它是一个大型程序,并且InputStream在打开文件期间有几个类可以访问该文件InputStream。
我可以将其范围缩小到几门课程,但我不确定下一步该看哪里。
您可以查看 Sysinternals Process Explorer,这是一个出色的工具,可让您调试哪个进程持有文件句柄的锁。在主菜单中单击Find -> Find Handle or DLL ...,然后键入文件名。它会向您显示持有锁的进程。
就您的 Java 程序而言,请确保即使抛出异常(最好是在语句中finally),您也始终关闭文件句柄。