Java: 引用与垃圾回收

3

我刚开始学习Java编程,对于引用和垃圾回收机制有一定的理解,但我需要一些建议。

如果(例如)我需要从文件中读取内容,并且我使用循环遍历每个文件并从中读取文本,那么我是否应该避免像这样的操作:

(br是BufferedReader类的一个实例)

br = new BufferedReader(new FileReader("filePath"));

基本上,每次循环执行时,br都会引用一个新的BufferedReader对象。这样做是错误的吗?如果是,我该怎么做才能使其更有效率?
非常感谢您提供的任何帮助。
完整代码:
  public int kerko(String folderName, String wantedWord) throws IOException{
   File file = new File(folderName);

   int count = 0;
   if(file.isDirectory()){
       File[] files = file.listFiles();
       for(File f: files){
           if(f.isFile() && f.getName().endsWith(".txt")){
               br = new BufferedReader(new FileReader(f.getAbsolutePath()));
               String line = br.readLine();
               while(line != null){
                   if(line.toLowerCase().contains(wantedWord)){
                        count++;
                   }

                   line = br.readLine();
               }   
               br.close();
           }
           count += kerko(f.getAbsolutePath(), wantedWord);
       }  
   }
   return count;
}

你可以展示更多的代码。这取决于你是否记得以异常安全的方式调用 BufferedReader 的 .close() 方法。 - nos
我编辑并发布了整个代码。 - Asker
正如@nos所提到的,包含readLine的代码应该放在try-catch块中,而br.close()应该放在finally部分。否则,读取错误将抛出异常,你将永远无法关闭读取器。 - FredK
实际上没有其他方法可以做到这一点。这是正确的方法。(除了使用try-with-resources?) - Louis Wasserman
2个回答

1

这种方式实例化BufferedReader和FileReader是可以的。

在离开{ }块后,这些对象将无法访问,稍后GC将收集它们。


1

将多个对象依次分配给同一个变量是完全可以的。垃圾收集器知道哪些对象不再被引用。

关于垃圾回收的一般建议:除非你进行了一些真正高级的操作,否则不要考虑它。这就是垃圾收集器的作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接