Хитрый, сам FileLock API не обещает многого:
Этот API блокировки файлов предназначен для
сопоставить напрямую с родной блокировкой
средство основной операционной
система. Таким образом, замки удерживаются на файле
должны быть видны всем программам, которые
иметь доступ к файлу, независимо от
язык, на котором эти программы
написаны.
Является ли замок на самом деле
предотвращает другую программу от
доступ к содержимому заблокированного
регион является системно-зависимым и
поэтому не указано. Родной
средства блокировки файлов некоторых
системы являются просто консультативными, то есть
что программы должны сотрудничать
соблюдать известный протокол блокировки в
Чтобы гарантировать целостность данных. На
в других системах собственные блокировки файлов
обязательно, что означает, что если одна программа
блокирует область файла, затем другие
программы фактически не могут
доступ к этому региону таким образом, что
нарушит замок. На еще одном
системы, являются ли собственные блокировки файлов
консультативный или обязательный настраивается
на основе файлов. Для обеспечения
последовательное и правильное поведение по всему
платформы, настоятельно рекомендуется
что блокировки, предоставляемые этим API, будут
используется так, как если бы они были консультативными замками.
Как ни странно, обсуждение API блокировки файлов, когда он находился в стадии разработки, утверждало, что ОС Windows обеспечивала обязательную блокировку и только для Unix только рекомендательную блокировку. Таким образом, при этом чтении можно ожидать, что ваш код будет отлично работать в Windows.
Интересно, что происходит, если ваш редактор не столько изменяет файл, сколько создает временный файл, а затем манипулирует записями каталога, чтобы заменить версию файла, которую вы заблокировали, новой версией. Разрешит ли Windows такое поведение?
Интересно, нужно ли вам прибегать к JNI, чтобы получить необходимый уровень контроля?