Удалить предыдущий XML-файл, пока новый файл не будет создан с использованием Java - PullRequest
1 голос
/ 07 мая 2011

Регулярно пишу в xml-файл в указанном месте, используя PrintWriter с данными, поступающими из базы данных. Я не хочу удалять существующий XML-файл до тех пор, пока генерация XML не будет полностью завершена в текущем цикле, как в случае каких-либо проблем во время генерации XML, я остался бы без XML-файла. Буду признателен за любые рекомендации по обработке этого сценария, в котором удаление текущего файла будет отложено до тех пор, пока создание / запись файла в текущем цикле не будет полностью завершена.

Ответы [ 2 ]

2 голосов
/ 07 мая 2011

Вы можете записать новый XML во временный файл, затем переместить / переименовать старый файл, затем переместить / переименовать временный файл в реальное имя файла и, наконец, удалить старый файл.Таким образом, вы всегда имеете файл на месте и не удаляете старый файл, пока новый файл не будет на месте.

1 голос
/ 07 мая 2011

Самый распространенный способ сделать это - переименовать исходный файл XML с другим именем.

Простая версия:

If 'file.xml' exists Then
    If 'file.xml.bak' exists Then 
        remove 'file.xml.bak'
    Fi
    rename 'file.xml' as 'file.xml.bak'
Fi
generate XML to 'file.xml'

Недостаток в этой версии заключается в том, чтоесли после переименования происходит сбой приложения (или системы), при следующем запуске этого приложения может появиться неполное или отсутствующее 'file.xml'.Вы можете решить эту проблему, если приложение попытается использовать файл резервной копии, если оно обнаружит любой сценарий.

В качестве альтернативы вы можете ввести третий файл;например, получить приложение для генерации 'file.xml.new' и выполнить переименование ПОСЛЕ записи успешно.Вы все еще должны справиться с отсутствующим 'file.xml' при некоторых обстоятельствах: это неизбежно, если у вас нет транзакционной файловой системы.Однако окно для сбоя меньше, и вы всегда должны заполнять копии текущих и резервных файлов.

...