Этот кусок кода вонючий:
while( file.exists() )
{
file.delete();
file = (FileConnection)Connector.open( FILE_NAME + "_front" + EXTENSION );
}
На самом деле, если файл существует, вы его удаляете, но забыли об экземпляре FileConnection
для только что удаленного файла. Я думаю, что это может быть причиной. Вам нужно немедленно закрыть экземпляр FileConnection
. Вот что BB API говорит об этом:
Аналогичным образом, файлы или каталоги могут быть удалены с помощью метода FileConnection.delete (), и разработчики должны закрыть соединение сразу после удаления, чтобы исключить доступ к соединению с несуществующим файлом или каталогом.
Поэтому попробуйте использовать следующее:
if (file.exists()) {
file.delete();
file.close();
file = (FileConnection) Connector.open(FILE_NAME + "_front" + EXTENSION);
}
Еще один момент, на который следует обратить внимание, - это то, что код очень самоуверенный / оптимистичный, он неправильно обрабатывает угловые случаи. Например. что если out.write(_raw);
не получится по какой-либо причине (например, нет свободного места)? Будут ли закрыты FileConnection и OutputStream? Нет. Поэтому вам нужно добавить блок finally
, чтобы убедиться, что вы на самом деле ничего не оставляете открытым.