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();
}
}
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();
}
}