关闭、析构函数和最终确定:Java
我有以下代码,它在我的类中可以很好地逐行读取文件关闭、析构函数和最终确定:Java,java,class,file-io,code-cleanup,finalize,Java,Class,File Io,Code Cleanup,Finalize,我有以下代码,它在我的类中可以很好地逐行读取文件 try { FileInputStream in = new FileInputStream(filename); BufferedReader reader=new BufferedReader(new InputStreamReader(in)); String line; while((line=reader.readLine())!=null){ // read
try { FileInputStream in = new FileInputStream(filename);
BufferedReader reader=new BufferedReader(new InputStreamReader(in));
String line;
while((line=reader.readLine())!=null){
// read the file
}
}
catch (Exception e) {
System.out.println(e);
}
但是,如果我尝试添加命令close,因为在文件读取完成后,我得到了错误:
in.close();
Error:(131, 9) java: cannot find symbol
symbol: variable in
location: class ReadFile
我搜索了关于使用后清理对象以及在程序结束前关闭文件的需要。并且发现了一些关于Java的帖子,但是很多都是相互矛盾的。关键是,最后我会感到非常困惑
是我错了,还是Java编程有点模糊和混乱?我的意思是,显然没有真正的使用,使用是非常值得怀疑的,而且使用也被认为是不必要的。关于这些问题的一些帖子相互矛盾,没有结论性
那么,如何继续呢?如果我真的需要关闭文件,如何消除此错误消息?关闭文件真的是可有可无的吗?清理程序完成时的类实例怎么样?您可能正在关闭
in.close()
out-side try块,因此很明显您将得到错误,因为in
是在本地try块中定义的
最好使用,这样您就不需要手动关闭文件流,因为您在try块内的中定义了变量
,所以在catch/finally/或try之外的任何地方都看不到该变量,所以出现了错误。将声明移到外部,然后重试:
改变这个
try { FileInputStream in = new FileInputStream(filename);
到
理想情况下,在检查null
之后,必须在finally
块内调用close()
方法。
为此,您需要在try
块之外的中声明变量
在finally
块中调用close()
方法可确保无论try
块中的代码是否引发异常,都会调用该方法
编辑:这是当您使用Java 6或更早版本时。对于Java 7和更高版本,您可以使用@JqueryLearner所建议的try with resource,在.close()中调用?请记住,在Java中,作用域很重要。@PradeepSimha-就在try块外部的catch{}Declare关闭之后。@Vash-它不是重复的,因为您提到的帖子没有解决我在这里引用的问题,命令“close”也没有Java中的析构函数。finalize()方法确实不是您应该使用或依赖的。而close()对于调用是绝对必要的。使用该语句,了解变量作用域。这是一个在每种语言中都很重要的概念。试用资源更好。它更容易正确,也更难出错,而且我认为可能还有其他优势。我的意思是针对Java6或更早版本。编辑了我的答案。谢谢不要用评论来争论网站的机制。@JunedAhsan-这解决了错误消息。谢谢。使用“资源试用”是一个很好的方法。@EmmaYazzie欢迎您
FileInputStream in = null;
try { in = new FileInputStream(filename);