Mat*_*t H 32 java exception stream
好吧,我一直在做以下(变量名已被更改):
FileInputStream fis = null;
try
{
fis = new FileInputStream(file);
... process ...
}
catch (IOException e)
{
... handle error ...
}
finally
{
if (fis != null)
fis.close();
}
最近,我开始使用FindBugs,这表明我没有正确关闭流.我决定看看是否有任何可以用finally {}块做的事情,然后我看,哦是的,close()可以抛出IOException.人们应该在这做什么?Java库会抛出太多已检查的异常.
McD*_*ell 44
对于Java 7及更高版本,应使用try-with-resources:
try (InputStream in = new FileInputStream(file)) {
// TODO: work
} catch (IOException e) {
// TODO: handle error
}
Run Code Online (Sandbox Code Playgroud)
如果你坚持使用Java 6或更低版本......
这种模式避免了使用null进行乱码:
try {
InputStream in = new FileInputStream(file);
try {
// TODO: work
} finally {
in.close();
}
} catch (IOException e) {
// TODO: error handling
}
Run Code Online (Sandbox Code Playgroud)
有关如何有效处理close的更多细节,请阅读此博文:Java:如何不弄乱流处理.它有更多的样本代码,更深入,覆盖包装的陷阱密切在捕捉块.
Max*_*art 26
类似下面的内容应该这样做,取决于您是否在尝试关闭流时抛出或吞下IOException.
FileInputStream fis = null;
try
{
fis = new FileInputStream(file);
... process ...
}
catch (IOException e)
{
... blah blah blah ...
}
finally
{
try
{
if (fis != null)
fis.close();
}
catch (IOException e)
{
}
}
Run Code Online (Sandbox Code Playgroud)
Edw*_*rzo 10
您可以使用添加了JDK7 的try-with-resources功能.它的创建恰恰是为了处理这类事情
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
Run Code Online (Sandbox Code Playgroud)
该文件说:
try-with-resources语句确保在语句结束时关闭每个资源.
| 归档时间: |
|
| 查看次数: |
49373 次 |
| 最近记录: |