Como saber se um arquivo esta aberto?

Ae galera blza como eu sei que um outro aplicativo esta com um determinado arquivo aberto, ex: Um aplicativo qualquer esta com um arquivo .txt aberto eu tenho de saber quando esse outro aplicativo terminou.

Blza!
Falow

Com o pacote java.nio você consegue verificar isso usando lock de arquivos.

Tem um exemplinho se não for pedir demais ? :lol: ou um lugar onde eu possa ver um exemplo usando um lock de arquivo para saber se o mesmo esta sendo usado por outro aplicativo, importante: Esse outro aplicativo não é Java.

Obrigado :smiley:

Aham - na verdade o “lock” de arquivos precisa de alguma cooperação das duas partes (é só ler o Javadoc de FileLock). Isso é feito, por exemplo, em alguns sistemas onde você define partes do arquivo que devem ficar “travadas” - tais como bancos de dados ISAM. Então é preciso ver se o tal outro programa também usa “locks”, e de que forma ele usa “locks”.

Na verdade só vi isso uma vez num sistema que desenvolvemos aqui na empresa, que é uma atualização de um sistema antiquíssimo, que roda em C e usa lock de arquivos para efetuar tal controle. O problema é que como FileLock só existe do Java 1.4 em diante, e o cliente tinha só o 1.3 homologado, a gente teve de se responsabilizar e efetuar uma “cópia privada” do 1.4 para rodar só o nosso sistema nessa máquina Solaris. Mas como precisa de cooperação entre as duas partes, e o código não é open-source, nem adianta eu querer postar aqui um código-exemplo. (Procure FileLock no www.javaalmanac.com, talvez tenha um exemplo lá)

Pode ser que o arquivo tenha sido aberto pelo outro programa apenas para leitura, e permitindo compartilhamento (é o default); nesse caso, você consegue abrir o arquivo sem problemas.

Pode ser que o arquivo tenha sido aberto pelo outro programa para escrita, de forma que outros programas não consigam abrir; nesse caso, você nem consegue abrir de jeito nenhum.

De modo geral, é mais fácil tentar abrir o arquivo, e se receber uma exceção, é porque você não pode abri-lo mesmo.