java - 关闭、析构和终结 : Java contradictions

标签 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 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 编程有点模糊和困惑?我的意思是,destructor 显然没有实际用途。 , 使用finalize很值得怀疑,close的使用也被认为是不必要的。关于这些问题的一些帖子是矛盾的且没有定论。

那么,这里该如何进行呢?在我真的需要关闭文件的情况下,如何摆脱这个错误信息?关闭文件真的可有可无吗?如何为程序完成清理类实例?

最佳答案

您收到错误是因为您在 try block 内定义了变量 in,因此它在 catch/finally/或 try 之外的任何地方都不可见。将声明移到 try 之外:

改变这个

try {  FileInputStream in = new FileInputStream(filename);

FileInputStream in = null;
try {  in = new FileInputStream(filename);

关于java - 关闭、析构和终结 : Java contradictions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23534142/

相关文章:

python - 如何在python中只删除文件的内容

c - 关闭文件的文件号

java - 我如何在java中使用无符号

java - Maven 2.1 依赖项 :analyze. 传递依赖项:已使用未声明的依赖项

java - 如何在 Dropwizard 中使用 Quartz 调度程序进行 REST 调用?

C++ 参数化构造函数错误

java - 尝试使用另一个类的方法时出现空指针异常

java - Java泛型方法的参数

java - 处理输入和输出时, "faster"会是什么?

C++ 实例创建顺序有何影响?