Tenho um aplicativo em Java que gera arquivos CSV, e estes arquivos sao postados em uma pasta da rede e os arquivos são acessados por outros usuários, so que estou com um problema que quando o arquivo esta aberto por outro usuário a minha aplicação não consegue sobreescrever o mesmo dizendo que o arquivo esta sendo usado por processo ou usuário, teria como este arquivo ser atualizado, sobre renomear o arquivo com outro nome não posso fazer pois outro processo usa o arquivo.
gostaria de saber se a alguma maneira de atualizar o arquivo mesmo ele estando aberto por outro processo ou usuário.
O programa está executando em Windows?
Acredito que esta seja uma limitação do sistema de arquivos da plataforma e acho muito difícil contornar isso com Java. Além disso, essa operação seria insegura, pois a alteração efetuada por um programa poderia sobrescrever a alteração efetuada por outro.
Sugiro repensar esta abordagem: Porque dois programas tem que acessar exatamente o mesmo arquivo? Porque as duas tem que manter o arquivo aberto? Não podem ser gerados novos arquivos? Não existe outra forma de gravação, usando banco de dados, por exemplo?
Davidtiago
sim o programa esta sendo executado em Windows.
Assim são relatórios gerados de informações que estão em banco de dados e usuario de outras areas usam estas informações, e corro o risco de vez o usuário copiar o arquivo ele abrir o arquivo e não fechar por isto precisava que o arquivo fosse atualizado mesmo aberto. e sobre gerar um arquivo com um novo nome tenho outra aplicação que le estes arquivos automaticamente tambem.
mesmo assim obrigado.
Rodrigo
[quote=rodamaral]Tenho um aplicativo em Java que gera arquivos CSV, e estes arquivos sao postados em uma pasta da rede e os arquivos são acessados por outros usuários, so que estou com um problema que quando o arquivo esta aberto por outro usuário a minha aplicação não consegue sobreescrever o mesmo dizendo que o arquivo esta sendo usado por processo ou usuário, teria como este arquivo ser atualizado, sobre renomear o arquivo com outro nome não posso fazer pois outro processo usa o arquivo.
gostaria de saber se a alguma maneira de atualizar o arquivo mesmo ele estando aberto por outro processo ou usuário.[/quote]
Ei chapa tenta “marcar” que esse arquivo está sendo usado no servidor quando alguem o abrir, e informar aos demais que está sendo usado para que nem tentem abrí-lo.
Ah sim e outra coisa atualizar o arquivo quando ele está sendo usado causa uma tremenda de uma incosistencia no seu arquivo de interações, resumindo essa não é uma boa prática.
[quote=rodamaral]Davidtiago
sim o programa esta sendo executado em Windows.
Assim são relatórios gerados de informações que estão em banco de dados e usuario de outras areas usam estas informações, e corro o risco de vez o usuário copiar o arquivo ele abrir o arquivo e não fechar por isto precisava que o arquivo fosse atualizado mesmo aberto. e sobre gerar um arquivo com um novo nome tenho outra aplicação que le estes arquivos automaticamente tambem.
mesmo assim obrigado.
Rodrigo[/quote]
E se fossem gerados arquivos em diretórios diferentes?
A aplicação geraria dois arquivos, em dois diretórios diferentes: um seria lido pelos usuários e outros seria lido pelos programas.
Esta é apenas uma sugestão, mas de qualquer forma acho que seria interessante separar o que pode ser manipulado pelo usuário do que pode ser manipulado por programas.
Valeu pela dica pessoal, resolvi o problema disponibilizando o arquivo em um diretorio que somente as aplicacões possuem acesso, e uma das aplicações que le o arquivo e disponibiliza para os usuarios evitando um arquivo ficar em aberto.
obrigado