private void salvarNomes() {
try {
ObjectInputStream is = new ObjectInputStream(new FileInputStream("nomes.nomes"));
ArrayList<ClsNomes> lista = (ArrayList<ClsNomes>) is.readObject();
is.close();
StringBuilder path = new StringBuilder(new File("").getAbsolutePath() + "\\");
File file = new File(path.toString() + "nomes.txt");
File rename = new File(path.toString() + "nomesB.txt");
if (file.renameTo(rename)) {
PrintWriter pw = new PrintWriter(file);
if (file.isFile()) {
DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
for (ClsNomes c : lista) {
pw.println(c.getNome() + "," + c.getTelefone() + "," + df.format(c.getDtaNascimento()));
}
pw.flush();
pw.close();
}
}
} catch (FileNotFoundException e) {
Mensagens.erro("Arquivo não encontrado", "IO");
Erros.registraErro(e.getMessage());
System.exit(0);
} catch (IOException ex) {
Mensagens.erro("Arquivo ao salvar arquivo", "IO");
Erros.registraErro(ex.getMessage());
System.exit(0);
} catch (ClassNotFoundException exa) {
Mensagens.erro("A classe não pôde ser encontrada", "IO");
Erros.registraErro(exa.getMessage());
System.exit(0);
}
}
Fiz esse codigo so para entender melhor Serialization… Ai beleza! Deu certo! O objeto foi salvo em outro método… Ai eu recupero ele nesse e da tudo certo. Até chegar em if (file.renameTo(rename)). Nao ta proseguindo o programa! Essa expressão está resultando em “false”!
Alguém sabe por que?
Depois do rename eu nem me preocupei ainda porque o programa nunca passou dali mesmo… =P
Vlws!
edit: btw, so estou querendo renomear o arquivo “nomes.txt” que ja existe pra fazer um backup antes de fazer a operação de escrever!
edit: fazendo file.isFile() retorna true!
Primeira coisa - você pode trocar isto aqui, que deixa seu programa chumbado no Windows:
# StringBuilder path = new StringBuilder(new File("").getAbsolutePath() + "\\");
# File file = new File(path.toString() + "nomes.txt");
# File rename = new File(path.toString() + "nomesB.txt");
para:
File currentPath = new File (".");
File file = new File (currentPath, "nomes.txt");
File rename = new File (currentPath, "nomesB.txt");
Segunda coisa - renameTo não consegue renomear alguma coisa se o arquivo de destino já existir. Você precisa verificar se o destino (que no caso é nomesB.txt) já existe; se existir, remova-o.
Beleza! Valeu pela dica! Vou mudar usando o path como diretorio pro construtor do File né!
O arquivo nomesB.txt nao existe =.
So existe o arquivo nomes.txt!
public static void main(String[] args) {
try {
File currentPath = new File(".");
File file = new File(currentPath, "teste.txt");
file.createNewFile();
File renamte = new File(currentPath, "teste2.txt");
if (file.renameTo(renamte)) {
System.out.println("tudo certo");
}
} catch (Exception e) {
}
}
Fiz esse programa pra testar… Se o arquivo nao existir ele cria e renomeia… Ok
Se o arquivo “teste2.txt” ja existe, ele cria o arquivo teste.txt, e como você disse nao consegue renomear para “teste2.txt” porque “teste2.txt” já existe.
Se o arquivo “teste.txt” já existe e o arquivo “teste2.txt” não existe… Ele renomeia normalmente o arquivo “teste.txt” para “teste2.txt”!
O meu programa é parecido com esse ultimo caso, ja existe o arquivo “nomes.txt” que eu quero renomear para “nomesB.txt” e não ta dando certo o_o
[quote=Murl]Beleza! Valeu pela dica! Vou mudar usando o path como diretorio pro construtor do File né!
O arquivo nomesB.txt nao existe =.
So existe o arquivo nomes.txt![/quote]
Essa história de “não existe” só acredito vendo
De qualquer maneira, tome sempre um pouco de cuidado - o retorno de renameTo não é particularmente muito confiável no Windows, já que basicamente o Java deixa o abacaxi para a API do Windows “MoveFile” e essa API não é muito católica; eu normalmente faço o seguinte: crio um método que faz 3 coisas:
a) Remove o arquivo destino, caso existir
b) Executa renameTo
c) Checa se o arquivo original não existe mais e se o arquivo destino foi criado com esse nome. Se isso houver ocorrido, eu retorno true, senão retorno false.
mudei o nome do arquivo pra você acreditar que ele nao existe entao =P
Rodei 3 vezes e deu 3 numeros diferentes e nao deu certo renomear...
O problema é que nao quero deletar o arquivo pra ele servir como backup entendeu? Logo abaixo eu crio o "nomes.txt" de novo com os novos nomes. Mas ai eu pensei... Se eu somente deletar o arquivo "nomes.txt" e alguma catastrofe acontecer durante o processo de criação dele de novo, tudo será perdido!
edit: esquece... lá atras eu tinha esquecido de fechar um BufferedReader com esse arquivo =X
mudei o nome do arquivo pra você acreditar que ele nao existe entao =P
Rodei 3 vezes e deu 3 numeros diferentes e nao deu certo renomear…
O problema é que nao quero deletar o arquivo pra ele servir como backup entendeu? Logo abaixo eu crio o “nomes.txt” de novo com os novos nomes. Mas ai eu pensei… Se eu somente deletar o arquivo “nomes.txt” e alguma catastrofe acontecer durante o processo de criação dele de novo, tudo será perdido!
edit: esquece… lá atras eu tinha esquecido de fechar um BufferedReader com esse arquivo =X