Abri um arquivo XML para escrita antes de ler

5 respostas
C

Boa tarde Pessoal,

Me deparei com a seguinte situação, tenho dois softwares um desenvolvido em .NET e um e JAVA, trabalho com o tramite de arquivos em XML, a rotina dos softwares é a seguinte:

(Software .Net) - Gera o arquivo XML e envia para o diretorio (Arquivo);

(Sotware JAVA) - Pega o XML do diretorio (Arquivo) e realiza a chamadas das funções necessarias;

no código JAVA tem um Timer que de 10 em 10 segundos consulta o diretorio (Arquivo), o problema é que em alguns casos antes do (.Net) terminar de salvar o arquivo na pasta o (Java) ja pega o XML ou seja o mesmo vai corrompido, e na chamada das funções fica faltando parametros, preciso criar uma rotina que tente abrir o arquivo para leitura/escrita (não sei ao certo rs), caso consiga continua os passos, isso para evitar que o codigo JAVA pegue o XML antes do mesmo estar totalmente salvo no diretorio.

Não sei ao certo se essa seria a melhor forma, alguem tem alguma sugestão ou poderia me ajudar como fazer essa tratativa???

Desde já obrigado,

t+

5 Respostas

A

cara,

faz o seguinte, na hora que vc criar o arquivo, vc da um nome diferente a seu arquivo, por exemplo arquivo_criando.xml, e quando vc finalizar a criação do xml, vc modifica o nome do xml, por exemplo arquivo.xml, e no java vc vai pegar todos os arquivos que possua o nome arquivo.xml.

espero ter te ajudado.

t+

C

Olá alissonvla,

Cara curti mto sua ideia, mais o pessoal quer dificultar as coisas hehe e precisam que seja dessa forma que eu falei, abrir o arquivo para escrita se consegui chama as funções JAVA, vou postar o trecho do código onde é feito atraves de um filtro a captura dos arquivos XML;

File diretorio = new File(dir);             
            
            FilenameFilter filtro = new FilenameFilter() 
            {
                public boolean accept(File dir, String name) 
                {
                    return (name.endsWith(".xml"));
                }
            };   
            
            File fList[] = diretorio.listFiles(filtro);

antes do filtro preciso tentar abrir o arquivo para escrita, me ajudem por favor....

vlw =D

E

A menos que o programa que escreve os dados crie o arquivo para acesso exclusivo, não é possível o programa Java esperar até que o outro programa acabe de escrever.

O que se costuma fazer, nesses casos em que um programa escreve e outro lê (sem que haja uma forma de coordenação entre os dois programas que não seja por arquivos) é gravar o arquivo com um nome diferente e só renomear quando o arquivo tiver sido concluído, ou então gravar em um diretório diferente e mover o arquivo para o diretório correto quando o arquivo tiver sido concluído.

A ‘abertura para acesso exclusivo’ é uma coisa que depende do sistema operacional - se o outro programa (o que grava) for em Java, por exemplo, acho que não dá para abrir um arquivo para acesso exclusivo.

A

cara,

na versão 6 do java, a classe File vc pode sentar a permissao do arquivo, no linux vai funcionar agora nao sei no windows, e tbm não sei como vc vai conseguir setar a permissao do arquivo no .net. pq vc poderia no .net criar o arquivo e setar a permissao de leitura para false, e qdo terminar a criação setar para true e no java vc vai pegar todos arquivos que tem permissão para leitura como true.

t+

luiz_renato

Olha,

As sugestões dos colegas são as mais apropriadas, inclusive aqui na empresa usamos e funciona.

Mas na java.nio tem uma API WatchService que faz notificações sobre alterações em diretórios (nunca usei).

Dê uma olhada em http://download.oracle.com/javase/tutorial/essential/io/notification.html .

Criado 10 de outubro de 2011
Ultima resposta 11 de out. de 2011
Respostas 5
Participantes 4