Java- 如果使用与 `FileInputStream` 相同的方法 returns,您如何在 finally 块中关闭 `FileInputStream`

Java- How can you close `FileInputStream` in finally block if the same method returns that `FileInputStream`

Sonar 显示了以下代码的错误,该错误属于拦截器类型。它在抱怨我没有关闭 FileInputStream 但我该怎么做呢? FileInputStream 是 return 类型的方法,如果我在这里关闭,那么它在调用的地方就没有用了。请让我知道 - 如果 return 与 FileInputStream 的方法相同,我如何在 finally 块中关闭 FileInputStream

代码如下:

@Override
public InputStream getInputStream() throws MissingObjectException {

    try {
        InputStream is;
        if (smbFile != null) {
            is = new BufferedInputStream(new SmbFileInputStream(smbFile), 60000);
        } 
        else {
            is = new BufferedInputStream(new FileInputStream(getFilePath()));
        }
        return is;
    }
    catch (Exception e) {
            throw new MissingObjectException();
    }
}

不需要在同一个函数中关闭输入。问题可能是您不应该在 try{} 块中声明 InputStream is 以及放置 return 语句。

在 try 块之前放置声明

 InputStream is= null;
try {
    if (smbFile != null) {
        is = new BufferedInputStream(new SmbFileInputStream(smbFile), 60000);             } else {
        is = new BufferedInputStream(new FileInputStream(getFilePath()));
    }
    return is;
}
catch (Exception e) {
        throw new MissingObjectException();
}finally{
  if(is !=null){
  is.close();
 }
}