Criar classe que leia um diretório ininterruptamente

6 respostas
jaboot

Boas pessoal.

Onde trabalho existe um programa, como se fosse um serviço, que fica lendo um diretório a procura de um arquivo. Quando este arquivo chega, esse programa lê o conteúdo e depois o destrói.

O que me foi sugerido: criar uma classe que fique lendo esse diretório também, abra o arquivo, copie o conteúdo e deixe à disposição do outro soft.

O que eu acho: que já de cara não vai dar. Não sei de quanto em quanto tempo o outro programa lê o diretório em busca do arquivo. Minha classe tem que ser BEM mais rápida, e não “lockar” o arquivo.

O que eu tenho que aprender: a criar uma classe que leia de X em X milissegundos esse diretório. Pra falar a verdade, eu nem sei se isso é possível, mas se for, pegar o conteúdo do arquivo eu já sei.

Alguém aqui já fez algo parecido? Se eu ficar lendo direto o computador vai perder muita performance? Tipo, eu não quero deixar o ponto de venda lerdo, aliás eu nem posso.

Se alguem puder dizer se é possível ou não eu já ficaria muito agradecido.
Grato

6 Respostas

T

Quem escreve o arquivo é um programa que você pode mudar?

Digamos que o programa que escreve o arquivo grave um arquivo .DOC, e o programa que lê os arquivos só possa ler arquivos .DOC, não outros arquivos.

Ele poderia em vez disso gravar com uma outra extensão (.DOC.1), aí seu programa Java leria esse arquivo, gravaria em um temporário (.doc.tmp) e somente quando acabasse de gravar nesse temporário, renomearia .doc.tmp para o formato que o tal programa que lê os arquivos deseja (.DOC).

Uma variação disso é fazer o tal programa que escreve os arquivos gerá-los em um outro diretório, e seu programa Java copiá-los e só então movê-los para o diretório onde o tal programa que lê os arquivos está esperando arquivos prontos.

jaboot

Ae thingol, sempre salvando a minha pele! Valeu mano!

Cara, eu conversei com um pessoal aqui e sim, dá pra jogar esse arquivo em outro diretório, eu leio com o java e copio para a “pasta da destruição :twisted:” hehehe ufa pelo menos isso

Mas vamos a pergunta inicial: uma classe java tem como ficar lendo um diretório sem parar?
Pelo menos, agora não tenho mais problemas com performance.

emailwss

OU poderia voltar estudar a OOP novamente.

jaboot

Agora eu tenho dois chefes.
Se eu não tivesse procurado no Google, na busca daqui e pesquisado no livro do Deitel na minha frente, com certeza eu não teria postado.
Obrigado, mas não ajudou em nada.

T

balarini:
Ae thingol, sempre salvando a minha pele! Valeu mano!

Cara, eu conversei com um pessoal aqui e sim, dá pra jogar esse arquivo em outro diretório, eu leio com o java e copio para a “pasta da destruição :twisted:” hehehe ufa pelo menos isso

Mas vamos a pergunta inicial: uma classe java tem como ficar lendo um diretório sem parar?
Pelo menos, agora não tenho mais problemas com performance.

“Sem parar” é modo de dizer. Você pode fazer algo como:

while (....) {
    try { Thread.sleep (1000); } catch (InterruptedException ex) {}
    File [] files = seudiretorio.listFiles();
    ... processe o seu diretório ...
}

Pus 1 segundo (1000 ms), mas acho que se o diretório for muito grande, é melhor até aumentar o tempo para evitar que seu disco fique sobrecarregado.

Roger75

Eu já ouvi falar do Quartz

http://www.opensymphony.com/quartz

Mas ainda não tive oportunidade de usá-lo. Veja se te ajuda.

Criado 25 de maio de 2006
Ultima resposta 26 de mai. de 2006
Respostas 6
Participantes 4