Использование java FileChannel FileLock, чтобы предотвратить запись файла, но разрешить чтение
Я думаю, что неправильно понимаю, как работают функции блокировки FileChannel.
Я хочу иметь эксклюзивную блокировку записи в файл, но разрешить чтение из любого процесса.
На компьютере с Windows 7 под управлением Java 7 я могу заставить блокировку FileChannel работать, но она предотвращает как чтение, так и запись из других процессов.
Как я могу добиться блокировки файла, которая запрещает запись, но позволяет чтение другими процессами?
1 ответ
FileChannel.lock()
имеет дело с областями файла, а не с самим файлом.- Замок может быть общим (много читателей, без писателей) или эксклюзивным (один писатель и без читателей).
Я предполагаю, что вы ищете немного другую функцию - открыть файл для записи, позволяя другим процессам открывать его для чтения, но не для записи.
Этого можно добиться с помощью API Java 7 FileChannel.open с нестандартной опцией открытия:
import static java.nio.file.StandardOpenOption.*;
import static com.sun.nio.file.ExtendedOpenOption.*;
...
Path path = FileSystems.getDefault().getPath("noshared.tmp");
FileChannel fc = FileChannel.open(path, CREATE, WRITE, NOSHARE_WRITE);
Заметка ExtendedOpenOption.NOSHARE_WRITE
которая является нестандартной опцией, существующей в Oracle JDK.