Problemas com arquivo em java! Urgente!

5 respostas
vitdexoff

Olá pessoal, estou precisando urgentemente terminar um sistema que eu construi, o problema é q ele foi feito todo no linux, mas tem q rodar no windows... não estou conseguindo renomear um arquivo já existente, consigo ler todo o conteúdo do arquivo, porém quando vou escrever nele (crio um arquivo auxiliar copio todo o conteudo pra ele, acrescento o que for necessário e depois renomeio) na hora de renomear o arquivo não renomeia, alguém pode ajudar???

public void salvaCadastroSenha(String senha){
     String raiz = defineDiretorio("/Tabelas/Senhas.bin");
     try {
        File arq = new File(raiz+"Tabelas\\auxSenhas.bin");
        FileOutputStream fosSenhas = new FileOutputStream(arq);
        ObjectOutputStream oosSenhas = new ObjectOutputStream(fosSenhas);        
        Senhas cadSenhas = new Senhas();
          
        //abre o arquivo de Crianca              
        ObjectInputStream isSenha = new ObjectInputStream(new FileInputStream(raiz+"Tabelas\\Senhas.bin"));
        ArrayList<Senhas> restoreSenha = new ArrayList<Senhas>();
        try{
            while (restoreSenha.add((Senhas)isSenha.readObject()));
        }catch(Exception ex){isSenha.close();}
        isSenha.close();         
        cadSenhas.setSenha(senha);
        restoreSenha.add(cadSenhas);
        
        for (int i = 0; i < restoreSenha.size() ; i++){
             oosSenhas.writeObject(restoreSenha.get(i));
        }
        arq.renameTo(new File(raiz+"Tabelas\\Senhas.bin"));
        JOptionPane.showMessageDialog(null, "Senha Cadastrado com Sucesso!");
        oosSenhas.close();
     }catch(Exception ex){System.out.println("Fudeu!");}  
    }

tudo funciona bem, porem na hora de renomear o arquivo naum renomeia (na pasta fica apenas o auxSenhas.bin).....
Obrigado!

5 Respostas

B

Considerando que defineDiretorio retorne o valor certo p/ o caminho da raiz, tente

arq.renameTo(new File(raiz+"Tabelas"+ File.separator + nomeDoArquivoRenomeado));
jgandolfi

Seguinte cara, eu acho que o seu próprio sistema está mantendo o arquivo aberto e por isso não renomeia.

De um close no arquivo assim que vc terminar de usá-lo depois renomeie ele ok.

B

jgandolfi:
Seguinte cara, eu acho que o seu próprio sistema está mantendo o arquivo aberto e por isso não renomeia.

De um close no arquivo assim que vc terminar de usá-lo depois renomeie ele ok.


Isso me lembra de um caso que via aqui no forum.

Feche o arquivo, dê um System.gc(), e renomeie o arquivo.

vitdexoff

bem galera, acho q o arquivo num tah aberto não, pq ele é do tipo File, e eu não encontrei um método close pra ele… além disso ele é passado para um FileOutputStream, que é passado para um ObjectOutputStream que então é fechado (oos.close();)…

vitdexoff

Obrigado galera, consegui resolver, o problema tava na hora de renomear o arquivo, no linux dava certo, mas no windows não, dai o jeito foi copiar o conteudo do arquivo para um array list, exluir o arquivo de origem, modificar o que for necessário no array list, criar outro arquivo (com o mesmo nome do que foi deletado) e salvar todo o array list denovo… obrigado msm gente!!

Criado 5 de junho de 2008
Ultima resposta 5 de jun. de 2008
Respostas 5
Participantes 3