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 personalizado10000毫秒
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 RandomAccessFile
para 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)