我正在为一些 Java 文件处理代码编写测试,并希望确保所有文件都正确关闭。我不想运行“lsof”,因为这会打开更多文件并使测试套件不可移植。有人知道这样做的方法吗?
问问题
102 次
1 回答
2
如果您正在寻找 JDK 的一部分,答案是否定的。
您可能会发现一些使用JVMTI的东西,但它是不可移植的(它是本机接口)。或者使用JPDA的东西,但这需要第二个 JVM。我给你这两个首字母缩写词作为谷歌搜索的开始。
如果您想在 JVM 中运行并具有可移植性,则必须为您的文件引用引入一个工厂:将所有new FileInputStream()
、new FileOutputStream()
、new RandomAccessFile()
、new FileReader
和new FileWriter
调用替换为该工厂对象上的方法。该工厂将返回这些对象的子类,这些对象的close()
方法已被覆盖。它还将增加一个“打开文件”计数器,然后由覆盖的close()
.
工厂方法和计数器需要是静态和同步的(除非您想注入工厂),并且应该使用系统属性来决定是返回子类流还是返回 JDK 版本。
就个人而言,我会接受评论中的建议,并首先使用 FindBugs。
于 2012-10-30T18:20:48.417 回答