Kal*_*lec 2 java try-with-resources
要澄清:由于来自Eclipse的消息,我甚至无法编译.第一个代码段:input并且inputBuffer无法识别.第二个代码片段,Eclipse希望我将交换机"Compliance and JRE切换到1.7"
我是资源尝试的新手,我不太了解语法或我做错了什么.这是我的代码
try {
FileReader input = new FileReader(this.fileName);
BufferedReader inputBuffer = new BufferedReader (input);
String line;
while ((line = inputBuffer.readLine()) != null) {
String[] inputData = line.split(",");
Node<Integer> newNode = new Node<Integer>(Integer.parseInt(inputData[0]),
Integer.parseInt(inputData[1]));
this.hashMap.add(newNode);
}
//inputBuffer.close();
//input.close();
}catch (NumberFormatException nfe){
System.out.println(
"Repository could not load data due to NumberFormatException: " + nfe);
}catch (FileNotFoundException fnfe) {
System.out.println("File not found, error: " + fnfe);
}finally {
inputBuffer.close();
input.close();
}
Run Code Online (Sandbox Code Playgroud)
finally块不起作用,所以我想试试
try (FileReader input = new FileReader(this.fileName)) {
......
}catch (FileNotFoundException e) {
......
}finally {
inputBuffer.close();
input.close();
}
Run Code Online (Sandbox Code Playgroud)
然而
我还应该将BufferedReader添加到try (...)......但是如何?
这也要求我将"合规性和JRE"切换为1.7.我不知道这意味着什么以及到目前为止这会对我的计划有什么影响,我不愿意这样做,直到有人解释这一切意味着什么或者我做错了什么.
编辑
我在try块之前移动了声明并用null初始化,这是"好"吗?
FileReader input = null;
BufferedReader inputBuffer = null;
try {
input = new FileReader(this.fileName);
inputBuffer = new BufferedReader (input);
...
} ...
Run Code Online (Sandbox Code Playgroud)
您必须使用Java 7来使用try-with-resources语句.
try-with-resources块也使用AutoClosable接口,因此请在finally块中省略这些关闭.它们将自动调用.
如果你想使用BufferedReader试试这个:
try (BufferedReader bufRead = new BufferedReader(new FileReader(this.fileName))) {
......
}catch (FileNotFoundException e) {
......
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用多个资源,如下所示:
try (FileReader input = new FileReader(this.fileName);
BufferedReader bufRead = new BufferedReader(input) ) {
......
}catch (FileNotFoundException e) {
......
}
Run Code Online (Sandbox Code Playgroud)
还有一件重要的事情:
如果你关闭一个BufferedReader包装另一个Reader,那么这个底层Reader也将被关闭.
在 try{}catch(){} 之前先声明 input 和 inputBuffer
像这样
FileReader input = null;
BufferedReader inputBuffer = null;
try
{
------
-------
}
Run Code Online (Sandbox Code Playgroud)
在 finally 的第一个块中:检查以下两个条件
if(inputBuffer != null)
{
inputBuffer.close();
}
if(input != null)
{
input.close();
}
Run Code Online (Sandbox Code Playgroud)
第二:如果您想要尝试多个资源,请执行以下操作:
try ( OpenDoor door = new OpenDoor(); OpenWindow window = new OpenWindow() )
{
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,无需在 finally 块中关闭上述资源。
| 归档时间: |
|
| 查看次数: |
7000 次 |
| 最近记录: |