Bloquear un fichero con Java
Introducción
Sección titulada «Introducción»Si estamos trabajando con ficheros en Java es posible que tengamos la necesidad de mantener consistente la información que contiene alguno de ellos. Para ello, una solución puede pasar por realizar un bloqueo lógico de un fichero. Es decir, marcar al fichero como bloqueado, para que el resto de procesos sepan que no deben tocar su contenido para mantenerlo consistente.
Así que vamos a ver cómo podemos bloquear un fichero con Java.
Obtener referencia al fichero
Sección titulada «Obtener referencia al fichero»Lo primero que haremos para bloquear un fichero con Java será obtener una referencia sobre el fichero mediante una clase File:
File file = new File("mifichero.txt");Acceder al canal del fichero
Sección titulada «Acceder al canal del fichero»Para acceder al fichero vamos a utilizar la clase RandomAccessFile en formato lectura y escritura. Y sobre ese objeto vamos a recuperar su canal de acceso mediante el método .getChannel().
RandomAccessFile raf = new RandomAccessFile(file, "rw");FileChannel channel = raf.getChannel();Bloquear el canal
Sección titulada «Bloquear el canal»Lo que manejamos en este momento es un objeto del tipo FileChannel. Un canal en Java es la evolución de un Stream normal de datos. El caso del FileChannel se representa una conexión abierta sobre un recurso sobre la cual se pueden realizar múltiples operaciones.
Una de las operaciones que podemos realizar sobre el canal es bloquearlo o liberarlo. Así, si queremos bloquear un fichero con Java, lo que hacemos es bloquear el canal mediante el método .lock().
FileLock lock = channel.lock();Verificar el bloqueo
Sección titulada «Verificar el bloqueo»Lo que obtenemos en este caso es un objeto FileLock. Este objeto será el que nos sirva para chequear el estado del canal/fichero antes de acceder a él. Si queremos ver si el fichero está bloqueado utilizamos el método tryLock() que devolverá una excepción OverlappingFileLockException en el caso de que haya un bloqueo.
try { FileLock lock = channel.tryLock();} catch (OverlappingFileLockException e) { System.out.println("El fichero está bloqueado");}Liberar el bloqueo
Sección titulada «Liberar el bloqueo»También tenemos que saber que para liberar el bloqueo del fichero tenemos el método .release()
lock.release();Cerrar el canal
Sección titulada «Cerrar el canal»Lo último que deberemos de hacer a la hora de bloquear un fichero con Java es cerrar el canal sobre el fichero con el método .close()
channel.close();Con estas pequeñas líneas de código hemos podido bloquear un fichero con Java.
Descarga el código de Bloquear un fichero con Java
El artículo explica cómo bloquear un fichero con Java utilizando FileChannel y FileLock para mantener la consistencia de los datos.