Заблокируйте файл и удалите его, не снимая блокировку - PullRequest
7 голосов
/ 04 декабря 2010

Я хочу прочитать из файла и затем удалить его, в то же время не давая другим процессам доступа к нему.Как это можно сделать?

FileLock не будет работать, потому что вам нужно снять блокировку и закрыть канал, прежде чем вы сможете вызвать File.delete ().Меня беспокоит то, что после снятия блокировки другой процесс может заблокировать его и начать чтение до того, как файл будет удален.

Я использую Java 5, и обновление до 6 в настоящее время недоступно.

Ответы [ 2 ]

5 голосов
/ 04 декабря 2010

Я не знаю, возможно ли это, но простое решение состоит в том, чтобы использовать пользователей операционной системы и разрешения, чтобы убедиться, что только ваш процесс может прочитать файл.

Другой подход - переименовать файл в случайно сгенерированную строку, затем заблокировать, прочитать, разблокировать, а затем удалить переименованный файл. Теоретически другая программа может угадать имя файла и прочитать файл сразу после того, как он разблокирован, но до того, как он будет удален. Но на практике вы, вероятно, будете в порядке.

1 голос
/ 04 декабря 2010

Можете ли вы переместить файл в другое место (где другие потенциальные процессы не могут его найти), а затем выполнить там работу? Если нет, как насчет очистки данных в файле до снятия блокировки?

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