Ресурс выпуска файла Java - PullRequest
2 голосов
/ 08 ноября 2010

Я использую SpringFramework Web MVC, и внутри сервлета handleRequestInternal я создал переменную для доступа к файлу в локальной файловой системе, т.е.

protected ModelAndView handleRequestInternal(HttpServletRequest request,......
{
......
 File file = new File(rssPath);
 if( !file.exists() ) {
  file.createNewFile();
  FileWriter outFile = new FileWriter(rssPath);
  outFile.write(rssJson);
  outFile.flush();
  //file = null;
 }
}

Вопрос в том, что если я не установлю файл на ноль, файл все еще будет использоваться, и я не смогу записать в него.

Мне нужно подождать несколько секунд, возможно, пока GC не соберется.

Глядя на File API, я не вижу такого метода, как close () для освобождения ресурсов.

Так как же правильно уничтожить ссылку на файл (не установив в нуль, я что-то упустил?)?

Ответы [ 2 ]

5 голосов
/ 08 ноября 2010

Вы не можете закрыть файлы. Но вы должны закрыть FileInputStream, FIleOutputStream, FileReader и FileWriter. В противном случае эти потоки (и файловые дескрипторы) не будут GCed. (пока Объект, содержащий Поток, не станет GCed)

EDIT: Сделайте это в finally -Block, чтобы быть уверенным, что вызывается close.

4 голосов
/ 08 ноября 2010

Как насчет close() метода для объекта FileWriter?

outFile.close();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...