java.io.FileNotFoundException (слишком много открытых файлов) - PullRequest
1 голос
/ 04 ноября 2010

Я использую следующий код для записи некоторых данных в файлы:

BufferedWriter writer = null;
try {
    writer = new BufferedWriter(new FileWriter(file));
    writer.write(...);
    writer.flush();
}
finally {
    if (writer != null)
        writer.close();
}

После многократного вызова метода я получил исключение FileNotFoundException, так как открыто слишком много файлов.не закрывать файловые дескрипторы при закрытии потока записи.Закрытие FileWriter отдельно не помогает.

Есть ли что-н.Я могу сделать, чтобы заставить Java закрыть файлы?

Ответы [ 4 ]

2 голосов
/ 04 ноября 2010

Ваш код выглядит нормально. Это может быть другая часть вашего приложения, у которой есть утечка файловых дескрипторов.

Вы можете отслеживать дескрипторы файлов, используя lsof в Linux или pfiles в Solaris. В Windows вы можете использовать ProcessExplorer .

1 голос
/ 04 ноября 2010

См. эту ветку о записи в файлы, хорошие советы ... обратите внимание на блок finally в ответе Anons

1 голос
/ 04 ноября 2010

Нет, Java закрывает дескрипторы файлов при закрытии программы записи. На самом деле он построен с использованием Pattern Decorator . Следовательно, это должно быть что-то еще. Показать трассировку стека.

0 голосов
/ 04 ноября 2010

BufferedWriter закрывает основной поток. Вероятно, это многопоточность. Вы можете сохранить экземпляр FileOutputStream и закрыть его. Что-то вроде:

java.io.FileOutputStream out = new java.io.FileOutputStream(file);
try {
  // make buffered writer, etc.
} finally {
  out.close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...