Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有一种可移植的方法来确定JVM从VM内部打开了多少文件?_Java_Unit Testing_Junit_Jvm - Fatal编程技术网

Java 有没有一种可移植的方法来确定JVM从VM内部打开了多少文件?

Java 有没有一种可移植的方法来确定JVM从VM内部打开了多少文件?,java,unit-testing,junit,jvm,Java,Unit Testing,Junit,Jvm,我正在为一些Java文件处理代码编写测试,希望确保所有文件都正确关闭。我不想运行“lsof”,因为这样会打开更多文件,使测试套件不可移植。有人知道怎么做吗 如果你在寻找属于JDK的东西,答案是否定的 您可能会找到一些可以使用的东西,但它不是可移植的(它是一个本机接口)。或者使用的东西,但这需要第二个JVM。我给你这两个首字母缩略词作为谷歌搜索的开始 如果你想在JVM中运行并且是可移植的,你必须为你的文件引用引入一个工厂:用工厂对象上的方法替换所有newfileinputstream(),newf

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

如果你在寻找属于JDK的东西,答案是否定的

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

如果你想在JVM中运行并且是可移植的,你必须为你的文件引用引入一个工厂:用工厂对象上的方法替换所有
newfileinputstream()
newfileoutputstream()
newrandomAccessFile()
newfilereader
,以及
newfilewriter
调用。此工厂将返回这些对象的子类,这些子类重写了
close()
方法。它还将增加一个“打开的文件”计数器,然后通过覆盖的
close()

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

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

另请参见: