gpt4 book ai didi

java - 当我尝试在finally block 中关闭BufferedReader时,为什么eclipse会提示?

转载 作者:行者123 更新时间:2023-12-01 07:23:02 29 4
gpt4 key购买 nike

这是我的代码:

public static String readFile()
{

BufferedReader br = null;
String line;
String dump="";

try
{
br = new BufferedReader(new FileReader("dbDumpTest.txt"));
}
catch (FileNotFoundException fnfex)
{
System.out.println(fnfex.getMessage());
System.exit(0);
}

try
{
while( (line = br.readLine()) != null)
{
dump += line + "\r\n";
}
}
catch (IOException e)
{
System.out.println(e.getMessage() + " Error reading file");
}
finally
{
br.close();
}
return dump;

所以 eclipse 提示由 br.close(); 引起的未处理的 IO 异常;

为什么会导致IO异常?

我的第二个问题是为什么 Eclipse 不会提示以下代码:

InputStream is = null; 
InputStreamReader isr = null;
BufferedReader br = null;

try{
// open input stream test.txt for reading purpose.
is = new FileInputStream("c:/test.txt");

// create new input stream reader
isr = new InputStreamReader(is);

// create new buffered reader
br = new BufferedReader(isr);

// releases any system resources associated with reader
br.close();

// creates error
br.read();

}catch(IOException e){

// IO error
System.out.println("The buffered reader is closed");
}finally{

// releases any system resources associated
if(is!=null)
is.close();
if(isr!=null)
isr.close();
if(br!=null)
br.close();
}
}
}

如果可能的话,如果您能用外行术语进行解释,我将不胜感激。感谢您提前的帮助

最佳答案

两个代码示例都应该有编译器错误,提示未处理的 IOException。 Eclipse 在我的两个代码示例中将这些显示为错误。

原因是 close 方法在 finally block 中调用时会抛出 IOException,这是一个受检查的异常,该 block 位于try block 。

修复方法是使用 try-with-resources statement ,在 Java 1.7+ 中可用。声明的资源被隐式关闭。

try (BufferedReader br = new BufferedReader(new FileReader("dbDumpTest.txt")))
{
// Your br processing code here
}
catch (IOException e)
{
// Your handling code here
}
// no finally necessary.

在 Java 1.7 之前,您需要将对 close() 的调用包装在 finally block 内自己的 try-catch block 中。这是大量冗长的代码,以确保所有内容都已关闭并清理。

finally
{
try{ if (is != null) is.close(); } catch (IOException ignored) {}
try{ if (isr != null) isr.close(); } catch (IOException ignored) {}
try{ if (br != null) br.close(); } catch (IOException ignored) {}
}

关于java - 当我尝试在finally block 中关闭BufferedReader时,为什么eclipse会提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30899624/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com