2011-01-10 5 views
6

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

+2

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. –

+0

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

+0

"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. –

Respuesta

0

puede copiar a la memoria RAM y leer de copia

+0

esto implementaría el enfoque de "minimizar el tiempo de la cerradura", ¿no? Ignorando el comentario de Sergey por un momento ("Pero de esta manera solo harás un error que es difícil de reproducir"). ¿Cómo implementar esto? Intenté "randomaccessfile" con lectura inversa. pero mientras estoy leyendo, no puedo cambiar el nombre del archivo. ¿Cuál es la forma más rápida de copiar un archivo o una parte de la memoria y leer la memoria? – dermoritz

Cuestiones relacionadas