2015-05-01 1 views
2

Как говорится в вопросе, проходит ли динамическая FileReader плохая практика? Должно ли это/можно ли это FileReader быть закрытым достаточно?Должен ли BufferedReaders передавать динамический FileReader?

BufferedReader buffReader = new BufferedReader(
    new FileReader(new File("C:/Path/To/File.txt"))); 
.... do something 
buffReader.close(); 

Следует также закрыть FileReader? Требуется ли разделение?

Возможно, простой вопрос, но я не очень разбираюсь в Java IO; поэтому приношу свои извинения. Заранее спасибо!

+0

Что такое «динамический« FileReader »? Где в Джавадоке он предлагает любое такое ограничение? Какова реальная проблема, которую вы пытаетесь решить? – EJP

+0

Динамический 'FileReader' создается в аргументах метода BufferedReader'. Я отлаживал некоторые повышенные проблемы, и это было воспринято как неправильно закрытое. Как ответил Immibis, на самом деле это правильно закрывается в методе 'close'' BufferedReader'. – shanehoban

+0

Также рассмотрите использование API файлов Java NIO.2. java.io.File теперь считается устаревшим API. – Puce

ответ

4

Нет, это не обязательно. buffReader.close() также закроет FileReader.

По какой-то причине это, похоже, не упоминается в Джавадоке. Тем не менее, если вы посмотрите на исходный код для BufferedReader, вы найдете close определяется как:

public void close() throws IOException { 
    synchronized (lock) { 
     if (in == null) 
      return; 
     in.close(); 
     in = null; 
     cb = null; 
    } 
} 

где in является завернутые Reader (в данном случае FileReader). Поэтому закрытие BufferedReader закрывает FileReader.

Это случай для всех «оберток» Я в курсе - InputStream с, OutputStream с, Reader с и Writer с, в том числе таких вещей, как InputStreamReader.

+0

Удивительно, спасибо @immibis! – shanehoban

 Смежные вопросы

  • Нет связанных вопросов^_^