Problemas com leitura/gravação de arquivo

5 respostas
L

Pessoal, estou usando JSE com Swing (NetBeans).

Estou gerando um compactador para efetuar backups automáticos para minhas outras aplicações.
O detalhe é que o programa abre o arquivo original, lê, grava no destino (zip) e ao fazer isso, ele está apresentando alguns problemas com arquivos que já estão em uso.

Contudo, sei que é possível copiar um arquivo mesmo ele estando em uso.

Minha idéia é de, para cada arquivo a ser compactado, copiar o arquivo original para um temporário e ler o TEMPORÁRIO, e depois sobrescrever com o próximo… até o fim…

Só que rodei pela internet atrás de um código que pudesse me ajudar mas todos fazem justamente o mesmo: Abrem o arquivo para copiar o conteúdo para o próximo.

Aparentemente o erro está na hora do read(), no código:

int count;
while ((count = this.bufferedInputStream.read(this.dados, 0, ControladorZip.BUFFER)) != -1) {
    this.zipOutputStream.write(this.dados, 0, count);
    this.barraProgresso.setValue(this.barraProgresso.getValue() + ControladorZip.BUFFER);
}

Alguém tem uma sugestão?

Vlw…

5 Respostas

gilberto_oliveira

Não sei bem se é isso, mas tive que fazer um .bat aqui na empresa pra gerar backup automático do banco de dados do servidor numa hora determinada (pelo agendador de tarefas do windows).
Porque não tenta então, copiar o arquivo para uma pasta temporária via comando externo do SO - no windows funciona, mesmo o arquivo estando em uso (foi assim que eu fiz), aí vc compacta o arquivo temporário e depois apaga ele.

L

Gilberto, valeu pela dica…

Antes de tentar, vou ver se alguém tem alguma solução em java ou alguma idéia…

De qualquer forma, alguem saberia me ajudar a incorporar a sugestão ao meu código?
Tipo…

  1. Como saber se o SO é Windows?
  2. Como executar um comando Windows através do Java?

Vlw…

jgbt

LordALMMa:
Gilberto, valeu pela dica…

Antes de tentar, vou ver se alguém tem alguma solução em java ou alguma idéia…

sem saber qual o erro fica dificil, coloque o stacjTrace da exception.

De qualquer forma, alguem saberia me ajudar a incorporar a sugestão ao meu código?
Tipo…

de uma olhada no metodo getProperties da classe System.

da uma olhada na classe Runtime.

[]´s

gilberto_oliveira

Para executar um comando externo:

String comando = "calc";//abre a calculadora do windows
try{
Runtime.getRuntime().exec(comando); 	
} catch(Exception e){
e.printStackTrace();
}

Para saber o nome do Sistema Operacional:

String nomeDoSistemaOperacional = System.getProperty("os.name");
L

Vlw ^^

Bom, pra ser bem sincero estou executando o compactador aqui e ele não dá mais erro.
Eu peguei este erro ontem ao executar o meu programa no XP Embedded (notebook) mas agora estou no meu PC normal (desktop), com Vista Business, e a @^#%@ não dá erro ¬¬
Nem nos arquivos do \Windows\

Fala sério…

Vou continuar testando… Talvez algum dia eu consiga o StackTrace novamente para postar…

Até lá, eu soh lembro que ele me retornou uma mensagem pré-tratada onde o getMessage() me retornou falando que o arquivo estava em uso…

ai ai…
3 vivas pra MS?

=D

Mesmo assim, vlw pela ajuda.
Se continuar aqui, como solução alternativa eu vou verificar o OS e se for RWindows eu faço a execução do comando…
e posto o StackTrace pra tentar achar uma solução…
vlw ^^

Criado 6 de fevereiro de 2008
Ultima resposta 6 de fev. de 2008
Respostas 5
Participantes 3