Renomear Arquivo txt

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. :smiley: :wink:

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…