Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BufferedReader的正确使用_Java_Bufferedreader - Fatal编程技术网

Java BufferedReader的正确使用

Java BufferedReader的正确使用,java,bufferedreader,Java,Bufferedreader,我使用以下样式读取带有BufferedReader的文件 try (BufferedReader br = new BufferedReader(new FileReader("my_file"))) { ... br.close(); } catch( IOException e ) { System.out.println( e.getMessage() ); } 我想知道的事情: 1-close()是否在正确的位置 2-我是否应该为“close()”添加另一个try..ca

我使用以下样式读取带有BufferedReader的文件

try (BufferedReader br = new BufferedReader(new FileReader("my_file"))) {
  ...
  br.close();
} catch( IOException e ) {
  System.out.println( e.getMessage() );
} 
我想知道的事情:

1-
close()
是否在正确的位置

2-我是否应该为“close()”添加另一个
try..catch

3-由于我对
br
使用了
new
,调用
close()
就足够了,还是我必须为GC编写
br=null


4-
FileReader
已被
新建
ed,我是否应该销毁它?

1-2-最好与finally或resource块一起使用。否则,如果之前发生异常,将不会调用close


3-调用close()就足够了。将对象设置为null不会删除引用。当不再有对对象的引用时,GC将销毁这些对象。因此,不要手动销毁对象

您正在代码中使用
try with resources
语句。在本例中,
try with resources
语句中声明的资源是
BufferedReader
。声明语句出现在
try
关键字后面的括号内。Java SE 7及更高版本中的类
BufferedReader
实现了接口
Java.lang.AutoCloseable
。由于
BufferedReader
实例是在
try with resource
语句中声明的,因此无论
try
语句是正常完成还是突然完成,它都将关闭。您可以从中了解有关此声明的更多信息。下面是修改后的版本:

try (BufferedReader br = new BufferedReader(new FileReader("my_file"))) {
  // your logic

} catch (IOException e) {
  System.out.println(e.getMessage());
} 
您正在使用语句。您不需要显式地对您的读者进行关闭。事实上,文件规定:

try with resources语句确保在语句末尾关闭每个资源。任何实现java.lang.AutoCloseable的对象(包括实现java.io.Closeable的所有对象)都可以用作资源

此外,文件读取器由BufferedReader修饰,关闭BufferedReader应关闭文件读取器

  • 由于使用了该语句,因此不需要明确地关闭流。在任何情况下,它都会自动关闭。如果您没有使用try with resource,则
    close()
    将位于错误的位置。要确保资源始终处于关闭状态,需要在
    finally
    块中调用close()
  • 如果在finally块中调用close(),还需要捕获它引发的已检查异常。如果您使用try-with-resource(就像您所做的那样),您就可以了
  • 所有变量都只存在于try块的范围内,因此您是安全的
  • BufferedReader关闭修饰的读卡器,因此不必显式地关闭它