Biblioteca para sincronização/backup de arquivos em java

Estou tendo problemas em simplesmente monitorar uma certa pasta.

O trabalho é: quando chegar um arquivo xml novo na pasta, eu o transfiro para outra.
Não posso pegar algo em tempo real, já que o sistema muitas vezes pode estar desligado e a pasta pode receber novos arquivos.
Logo, preciso de algo que procure de tempos em tempos. Eu tentei reinventar a roda, mas algo tá saindo errado.

Algumas notas não sobem, mas depois que eu passo uma segunda leitura com o mesmo sistema, elas sobem e assim por diante, sem falar do processamento gigantesco quando o sistema é submetido a uma quantidade cavalar de arquivos.

Não queria ajuda com meu código, só queria saber de vocês se existe alguma biblioteca em java que me ajudasse com essa questão, tipo uma biblioteca com GIT ou algo do tipo. Eu vi a do GIT, mas é necessário ter que instalar o GIT para usá-la e fica fora de mão instalar no cliente.

O Sistema Operacional dos clientes é Windows.

O Sistema Operacional dos clientes é Windows.

Agradeço desde já pela atenção.

Git é para fazer o controle de versão de arquivos, não para backup.

Está acontecendo algum erro no seu código?
Tem algum StackTrace?

Você realmente precisa salvar estes arquivos em uma pasta?
Não pode salvar os XMLs num banco de dados?

Sim eu to ciente que o GIT é um sistema de controle de versão rs, pensei em utilizar ele como backup(porque não?).
Não acontece erro nenhum nos testes locais, o código é simples o algoritmo dele é o seguinte:

  • Eu passo uma leitura nas pastas e subpastas e adiciono todos os arquivos xml num LinkedList:
  • Depois passo copiando todos os arquivos válido que tem uma tag “dhRecbto” maior que a salva atualmente.
  • Salvo a ultima data do ultimo arquivo (tag “dhRecbto”) que subiu e reinicio;

Peguei alguns casos que deram erro ao subir e testei localmente com o mesmo cenário, e os mesmos subiram corretamente. O Código não está dando erro porque não está aparecendo no meu log (uso uma exception no sistema todo que gera log). Não dá nenhuma exception…

Eu não uso BD interno, o sistema fica na máquina de clientes. Eu apenas seleciono os novos xmls e jogo para uma pasta temporária do sistema, onde uma thread de tempos em tempos verifica se há arquivos e manda os existentes para o meu WebService, só aí então eu salvo num banco de dados.

Que erro aconteceu?
Não tens um StackTrace?

Simplesmente não subiram rs. Sem stacktrace.

Começo a desconfiar se o arquivo poderia mesmo estar ali na hora da leitura, já que normalmente a pasta que eu fico lendo, é usado por outro sistema que joga as xmls ali. Aí vai saber o que pode ter acontecido.

No momento eu faço a leitura dos arquivos após uma certa data, estou pensando em mudar minha estratégia para ler todos arquivos da pasta novamente, toda vez que passar a leitura.

Por isso perguntei se existia uma biblioteca, já que para isso, terei que utilizar algoritmos para eficiência na busca de cada arquivo, etc e tal. Ou quem sabe um banco de dados interno ao sistema, o problema é instalar tudo na máquina do cliente.

Nao pode simplesmente usar um software pronto para isso?

http://www.softdownload.com.br/10-programas-gratuitos-sincronizar-arquivos-windows.html

Pois é bem que eu queria, mas como o sistema fica em vários clientes, fica fora de mão. Para eu não ter a necessidade de “inventar a roda” nesse caso, seria a existência de alguma biblioteca de sincronização rs.

Queria muito era saber como +/- o google drive/dropbox fazem para pegar os arquivos em tempo real sem a necessidade de um processamento gigante. :confused: … Mas só a parte da seleção dos arquivos kkkkk.

Pode tentar isso para saber pontualmente o que foi criado:

https://www.google.com.br/search?safe=active&q=watching+Files+java