Изменение файла во время использования с использованием Java - PullRequest
1 голос
/ 17 мая 2010

У меня есть текущие задачи Java JAR, которые пытаются изменять файл каждые 60 секунд.

Проблема в том, что если пользователь просматривает файл, программа Java не сможет его изменить. Я получаю типичное IOException.

Кто-нибудь знает, есть ли в Java способ изменить используемый файл? Или кто-нибудь знает, как лучше всего решить эту проблему?

Я думал об использовании методов canRead (), canWrite () для проверки того, используется ли файл. Если файл используется, то я думаю о создании резервной копии данных, которые не могут быть записаны. Затем через 60 секунд добавьте логику, чтобы проверить, является ли файл резервной копии пустым или нет. Если резервный файл не пустой, добавьте его содержимое в основной файл. Если пусто, просто добавьте новые данные в основной файл. Конечно, первое, что я всегда буду делать, это проверю, используется ли файл.

Спасибо за все ваши идеи.

Ответы [ 3 ]

2 голосов
/ 17 мая 2010

Я думал об использовании файла методы canRead (), canWrite () для проверки если файл используется.

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

Вместо этого попытайтесь получить FileLock для файла и использовать «файл резервной копии», если это не удастся.

1 голос
/ 17 мая 2010

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

1 голос
/ 17 мая 2010

Если пользователь просматривает файл, вы все равно сможете его прочитать. В этом случае создайте точную копию файла и внесите изменения в новый файл.

Затем через следующие 60 секунд вы можете:

1) Проверьте, просматривается ли файл, а если нет, удалите его и замените более ранним файлом, а затем обновите этот файл напрямую.

2) Если он просматривается, продолжите вносить изменения в копию файла.

РЕДАКТИРОВАТЬ: Как упоминал Майкл, при работе с основным файлом, сначала получите блокировку для него.

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