tengo que leer los archivos de registro en el momento en que se escriben. el problema es que estos archivos de registro se renombrarán en algún momento y tengo que garantizar que esta operación de cambio de nombre sea posible/el proceso de lectura de java no lo está bloqueando.Archivo de lectura (registro) sin bloqueo de cambio de nombre/mudanza para otros procesos
cómo hacer esto
Mientras que Java es multiplataforma, este problema es muy dependiente del sistema operativo. Linux, por ejemplo, no bloqueará el archivo de manera predeterminada. Puede moverlo o incluso eliminarlo mientras está abierto para su lectura. Sin embargo, no conozco ninguna solución para Windows, así que no puedo responder esta (buena) pregunta. –
Pero el caso de uso: "leer archivos de registro mientras crecen y ser renombrados a veces" debería ser frecuente, ¿no es así? ¿Qué puedo hacer, minimizando el tiempo de la cerradura? Leyendo solo la última línea - ¿Cómo? – dermoritz
"Minimizar" no es realmente una buena idea, aunque es posible implementar el uso de lectura de acceso aleatorio. Pero de esta manera solo crearás un error que es difícil de reproducir. Si el proceso de lectura conoce el cambio de nombre de la lógica, podría evitar abrir el archivo si va a renombrarse. Pero es una especie de semi-solución que puede funcionar o no según la lógica en cuestión. Lo mejor que puede hacer es hacer que el proceso de cambio de nombre lo intente una y otra vez si falla el cambio de nombre, por lo que no será un error fatal. Pero solo funciona si tienes control sobre él. –