Как я могу заблокировать файл с помощью Java (если это возможно) - PullRequest
108 голосов
/ 24 сентября 2008

У меня есть процесс Java, который открывает файл с помощью FileReader. Как я могу запретить другому (Java) процессу открывать этот файл или хотя бы уведомить второй процесс о том, что файл уже открыт? Это автоматически заставляет второй процесс получить исключение, если файл открыт (что решает мою проблему), или мне нужно явно открыть его в первом процессе с каким-то флагом или аргументом?

Для уточнения:

У меня есть приложение Java, которое перечисляет папку и открывает каждый файл в списке для его обработки. Он обрабатывает каждый файл за другим. Обработка каждого файла состоит из его чтения и выполнения некоторых вычислений на основе содержимого, и это занимает около 2 минут. У меня также есть другое приложение Java, которое делает то же самое, но вместо этого пишет в файл. Я хочу иметь возможность запускать эти приложения одновременно, чтобы сценарий развивался следующим образом. ReadApp перечисляет папку и находит файлы A, B, C. Он открывает файл A и начинает чтение. WriteApp выводит список папок и находит файлы A, B, C. Он открывает файл A, видит, что он открыт (по исключению или любым другим способом), и переходит к файлу B. ReadApp заканчивает файл A и продолжает B. открыт и продолжает C. Это очень важно, что WriteApp не пишет, пока ReadApp читает тот же файл или наоборот. Это разные процессы.

Ответы [ 11 ]

0 голосов
/ 24 сентября 2008

Вы используете API java.nio. * Для блокировки файла. Однако это не гарантирует блокировку. Это зависит от того, поддерживает ли базовая ОС блокировку или нет. Как я понимаю, Операционные системы, такие как Linux, не поддерживают блокировку, и, следовательно, вы не можете заблокировать, даже если используете эти API

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