Dá uma olhada se o arquivo não está como protegido contra gravação.
Abçs!
T
thingol
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.
H
Helen_Batista
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
T
thingol
Dica número 1: para você montar um nome de arquivo com File, use:
Filediretorio=newFile("c:\tmp");// não precisa pôr um "\" no finalFilearquivo=newFile(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).
H
Helen_Batista
Thingol,
O arquivo de destino não existe ainda e o diretório do arquivo existe sim.
T
thingol
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.
H
Helen_Batista
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.
T
thingol
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…