Solução de monitoramento de alteração e adição de conteúdo de arquivos Java

Introdução

Para monitorar e processar alterações no conteúdo do arquivo, geralmente existem dois cenários principais de aplicação.

1. Preocupe-se apenas se o conteúdo do arquivo foi alterado

O cenário em que o conteúdo do arquivo é alterado é o modo de modificação completa, não o modo de anexação de conteúdo. Por exemplo, o conteúdo de um arquivo xml é alterado. Nesse caso, geralmente só precisamos monitorar se o conteúdo do arquivo foi modificado e, após monitorar a alteração do conteúdo, acionar a lógica de negócios para recarregar o arquivo inteiro.

2. Preste atenção ao novo conteúdo do arquivo

Este cenário significa que o conteúdo do arquivo será apenas anexado e não afetará o conteúdo anterior do arquivo. Quando o conteúdo do arquivo é anexado continuamente, é necessário obter o conteúdo anexado do arquivo a tempo e armazenar o conteúdo no banco de dados ou processá-lo posteriormente. Por exemplo, arquivos de log.

Solução de implementação Java

Para implementar os dois cenários acima em Java, você pode usar a biblioteca common-io, que fornece monitoramento e processamento de arquivos. A coisa toda é desenhada de acordo com o padrão do observador e consiste em três partes: observador, ouvinte e monitor.

  • Ouvinte FileAlterationListener: Comportamento acionado quando um arquivo é alterado.
  • Observador FileAlterationObserver: observe as alterações no arquivo e notifique os ouvintes registrados para executar os eventos correspondentes.
  • Monitor FileAlterationMonitor: O próprio Monitor também é um thread executável. Ele chama o observador registrado para verificar o arquivo a cada intervalo. O tempo padrão é , e o tempo pode ser personalizado 10000毫秒por meio de .new FileAlterationMonitor(long interval)

Através das bibliotecas acima, podemos capturar eventos de criação, modificação e exclusão de arquivos e pastas, mas se ainda quisermos obter o conteúdo continuamente anexado de arquivos do tipo apêndice em tempo hábil, também precisamos usar o próprio Java classe, que fornece métodos RandomAccessFilepara seek()acessar O conteúdo do arquivo pode ser lido e escrito a partir da posição da linha gravada. Aqui estendemos a implementação desta classe e registramos o número de linhas lidas a cada vez. Quando o arquivo for modificado, continue lendo o conteúdo até o final do arquivo, que é o conteúdo anexado ao arquivo desta vez (depois de ler para no final, registre o número de linhas para a próxima vez Prepare-se para ler o conteúdo incremental).

Este artigo não contém implementação de código específico, mas fornece principalmente métodos de implementação e bibliotecas Java correspondentes. Existem muitos códigos específicos online. Embora a qualidade da implementação seja irregular, eles ainda são suficientes. Você mesmo pode organizá-los e encapsulá-los.

Ao interromper ativamente o monitoramento, você deve chamar monitor.stop();o método para liberar recursos de thread.
Quando um arquivo/pasta é renomeado, os eventos de exclusão e criação de arquivo são acionados.


(FIM)

おすすめ

転載: blog.csdn.net/catoop/article/details/129951792