java - 是否可以检查 FileInputStream 是否正在使用文件,并且该流是否尚未关闭?

标签 java testing

有这样一种读取文件并做一些事情的方法:

public void readFileAndDoSomething(File file) {
     InputStream inputStream = new FileInputStream(file);
     // a lot of complex code which reads the inputStream
     // and we don't know if the inputStream is closed or not
}

现在我想测试该方法以确保使用该文件的任何输入流是否最终关闭。

我的测试代码:

public void test() {
    File testFile = new File("my_test_file");
    readFileAndDoSomething(testFile);

    // is it possible to just check the file to make sure
    // if it is still used by some unclosed input streams?
}

请看我在test方法中的注释,可以吗?

最佳答案

至少在 LINUX 中是可能的,尽管在 Java 中不是直接的。

LINUX 有一个名为 lsof 的实用程序,可以判断给定文件是否在某个进程中打开。您可以使用 Runtime.exec 或 ProcessBuilder 调用此实用程序。

在 Windows 中,我不确定,但是你不能尝试打开文件进行写入吗?如果仍然有人打开该文件,它应该不起作用。

关于java - 是否可以检查 FileInputStream 是否正在使用文件,并且该流是否尚未关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20237905/

相关文章:

c# - 带有 DisableRequestSizeLimit 的 ASP.NET Core 测试方法

javascript - 用于多个脚本的单个 istanbul 命令(或组合覆盖率报告)

java - Espresso 测试 NestedScrollView - "Error performing ' 滚动到 View 'with id:"

java - 用 do while 循环提示,似乎无法进入循环

java - 如何使用 Jedis 库将这些数据保存到 Redis 中?

java - 将图像编码为视频时出现 JCodec 错误

testing - jMeter 没有收到一些 cookie

java - 如何使用Android接收特定 radio 频率

java - 迭代 hashmap struts 1.x

c# - 在测试运行期间从 MSTest 中的代码调用类别或测试名称