8

我正在为一些 Java 文件处理代码编写测试,并希望确保所有文件都正确关闭。我不想运行“lsof”,因为这会打开更多文件并使测试套件不可移植。有人知道这样做的方法吗?

4

1 回答 1

2

如果您正在寻找 JDK 的一部分,答案是否定的。

您可能会发现一些使用JVMTI的东西,但它是不可移植的(它是本机接口)。或者使用JPDA的东西,但这需要第二个 JVM。我给你这两个首字母缩写词作为谷歌搜索的开始。

如果您想在 JVM 中运行并具有可移植性,则必须为您的文件引用引入一个工厂:将所有new FileInputStream()new FileOutputStream()new RandomAccessFile()new FileReadernew FileWriter调用替换为该工厂对象上的方法。该工厂将返回这些对象的子类,这些对象的close()方法已被覆盖。它还将增加一个“打开文件”计数器,然后由覆盖的close().

工厂方法和计数器需要是静态和同步的(除非您想注入工厂),并且应该使用系统属性来决定是返回子类流还是返回 JDK 版本。

就个人而言,我会接受评论中的建议,并首先使用 FindBugs。

于 2012-10-30T18:20:48.417 回答