Java 有没有一种可移植的方法来确定JVM从VM内部打开了多少文件?
我正在为一些Java文件处理代码编写测试,希望确保所有文件都正确关闭。我不想运行“lsof”,因为这样会打开更多文件,使测试套件不可移植。有人知道怎么做吗 如果你在寻找属于JDK的东西,答案是否定的 您可能会找到一些可以使用的东西,但它不是可移植的(它是一个本机接口)。或者使用的东西,但这需要第二个JVM。我给你这两个首字母缩略词作为谷歌搜索的开始 如果你想在JVM中运行并且是可移植的,你必须为你的文件引用引入一个工厂:用工厂对象上的方法替换所有Java 有没有一种可移植的方法来确定JVM从VM内部打开了多少文件?,java,unit-testing,junit,jvm,Java,Unit Testing,Junit,Jvm,我正在为一些Java文件处理代码编写测试,希望确保所有文件都正确关闭。我不想运行“lsof”,因为这样会打开更多文件,使测试套件不可移植。有人知道怎么做吗 如果你在寻找属于JDK的东西,答案是否定的 您可能会找到一些可以使用的东西,但它不是可移植的(它是一个本机接口)。或者使用的东西,但这需要第二个JVM。我给你这两个首字母缩略词作为谷歌搜索的开始 如果你想在JVM中运行并且是可移植的,你必须为你的文件引用引入一个工厂:用工厂对象上的方法替换所有newfileinputstream(),newf
newfileinputstream()
,newfileoutputstream()
,newrandomAccessFile()
,newfilereader
,以及newfilewriter
调用。此工厂将返回这些对象的子类,这些子类重写了close()
方法。它还将增加一个“打开的文件”计数器,然后通过覆盖的close()
工厂方法和计数器需要是静态的和同步的(除非您想要注入工厂),并且应该使用系统属性来决定是返回子类流还是返回JDK版本
就我个人而言,我会采纳评论中的建议,首先使用FindBugs。另请参见: