Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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_Java_Class_File Io_Code Cleanup_Finalize - Fatal编程技术网

关闭、析构函数和最终确定: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);