Oi pessoas estou tentando renomear um arquivo txt o meu codigo é:
[b] private void _renomear(verificarArquivoProdesp_DO registro) {
File arquivo = new File(“c:\tmp\” + registro.getNomeArquivoProdesp());
File arquivoRenomeado = new File(“c:\tmp\” + registro.getNovoNomeArquivoProdesp());
boolean renomeado = arquivo.renameTo(arquivoRenomeado);
if (!renomeado) {
throw new excessaoArquivoProdesp("Arquivo não foi renomeado");
}
}[/b]
Não sei onde tem erro, pois está entrando na excessão. Alguem poderia me ajudar?
Oi Helen,
Qual foi o valor que você inseriu em sua variável renomeado?
[]'s
Hal
Olá!
Helen, utilizei o código abaixo:
File arquivo = new File("C:\arquivo.txt");
arquivo.renameTo(new File("C:\renomeado.txt"));
e funcionou perfeitamente.
Dá uma olhada se o arquivo não está como protegido contra gravação.
Abçs!
Dona Helen,
Se o arquivo de destino já existir, renameTo não consegue funcionar.
Além disso, se o diretório do arquivo de destino não existir, também há problemas.
Confira se o arquivo de destino não existe e se o diretório do arquivo de destino existe.
Quando eu mando rodar direto não está entrando na linha boolean renomeado = arquivo.renameTo(arquivoRenomeado);
Mas quando eu mando rodar linha a linha ele entra porém com o valor da variavel renomeado = false =/
os valores de getNomeArquivoProdesp() = teste.txt e o valor da variavel getNovoNomeArquivoProdesp() = renomeado.txt
Dica número 1: para você montar um nome de arquivo com File, use:
File diretorio = new File ("c:\tmp"); // não precisa pôr um "\" no final
File arquivo = new File(diretorio, registro.getNomeArquivoProdesp()); // o Java põe o que for mais adequado - "\" ou "/"
Dica número 2: para evitar problemas ao testar, apague sempre o arquivo “c:\tmp\renomeado.txt” antes de rodar seu programa, porque se ele existir, você não conseguirá renomear o arquivo original.
Dica número 3: o retorno de “renameTo” não é nem um pouco confiável.
A Sun sabe disso mas não vai corrigir isso nunca (porque iria quebrar programas que funcionam com esse erro), tanto é que no Java 7 eles vão criar um novo “package” (java.nio.filesystem) que tem versões corrigidas de java.io.File.
Eu costumo ver se o arquivo foi renomeado com sucesso se o arquivo original não existir mais, só o arquivo renomeado. (Use o método “exists” da classe File).
Thingol,
O arquivo de destino não existe ainda e o diretório do arquivo existe sim.
Se seu programa estiver rodando no Windows Vista (ou então em algum outro Windows anterior) e o usuário que for rodar o programa não tiver as permissões corretas sobre o diretório c:\tmp, então o programa não conseguirá renomear o arquivo.
Thingol, obrigada pelas suas dicas, gostei muito e me ajudou bastante.
Ví que o problema nem era no meu codigo, era outra coisa.
Esse arquivo que vai ser renomeado, é gerado por um outro sistema, e qdo entrava pra renomear o arquivo não tinha aparecido no meu diretório ainda rs =)
Mas o problema está resolvido agora.
Obrigada novamente.
Podia ser pior. Existe um comando no Unix chamado “touch”; ele serve, a princípio, para mudar a data de um arquivo para a data atual. Só que quando o arquivo não existe, o “touch” cria um novo arquivo, com 0 bytes.
Imagine se “renameTo” fizesse isso também - se não achasse o arquivo original, criasse um arquivo vazio…