packageteste;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;importjava.io.PrintWriter;publicclassFiles{publicstaticvoidmain(String[]args)throwsIOException{Filefile=newFile("C:\Documents and Settings\marcelo\Desktop\TestandoWriters.txt");if(!file.exists()){file.createNewFile();System.out.println("Arquivo criado com sucesso");}else{System.out.println("Arquivo ja existe");}FileWriterfw=newFileWriter(file,true);PrintWriterpw=newPrintWriter(fw);BufferedWriterbw=newBufferedWriter(pw);inti=0;while(i<20){bw.write("Marcelo");// era pra gravarbw.newLine();// passar para proxima linha do arquivoi++;}}}
Feche o arquivo (use o método “close”) antes de sair do programa.
D
Dota
packageteste;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;importjava.io.PrintWriter;publicclassFiles{publicstaticvoidmain(String[]args)throwsIOException{Filefile=newFile("C:\Documents and Settings\everton\Desktop\TestandoWriters.txt");if(!file.exists()){file.createNewFile();System.out.println("Arquivo criado com sucesso");}else{System.out.println("Arquivo ja existe");}FileWriterfw=newFileWriter(file,true);PrintWriterpw=newPrintWriter(fw);BufferedWriterbw=newBufferedWriter(pw);fw.close();inti=0;while(i<20){bw.write("Marcelo");bw.newLine();i++;}//bw.flush();bw.close();}}
Mesmo assim nao funciona, agora estranho que quando tento escrever no arquivo sem o while, ou seja so uma vez funciona.
E
entanglement
É porque você fechou o arquivo antes de escrevê-lo (ao usar fw.close). O jeito recomendado de usar arquivos é criar apenas uma varíavel, não 3, 4 ou 5, para cada arquivo. Faça assim:
PrintWriterpw=newPrintWriter(newBufferedWriter(newFileWriter(file,true)));inti=0; while(i<20){pw.println("Marcelo"); i++; }pw.close(); // Isto fecha o pw, que fecha o BufferedWriter, que fecha o FileWriter, que grava tudo em arquivo.
Prontinho, muito mais claro, fácil e funcional. Deixe sempre o PrintWriter como o mais “externo”, já que ele tem os métodos práticos “println” e “printf”,
luiz_renato
Colega
Tire
fw.close();
que funciona pq vc usa ela pra criar o PrintWriter .
Melhor ainda é usar o PrintWriter sem BufferedWriter pq ele escreve a String no arquivo e já gera a quebra de linha que vc faz c/
bw.write("Marcelo");
bw.newLine();
Assim p/ gravar cada linha :
while(i<20){pw.println("Marcelo"); i++; }
Luiz Renato
D
Dota1 like
Obrigado Entanglement e Luiz. Agora qual o problema de não usar o close()? Porque nao grava?
Outra coisa deixando o PrintWriter encapsulando tudo, para quebrar as linhas vou ter que usar “\n” mesmo né?!
E
entanglement1 like
Pois é. Um arquivo, em Java, é algo que não é escrito imediatamente no disco; normalmente é gravado de 8 em 8 kbytes se você usar um BufferedWriter. Isso é feito para tornar seu programa mais rápido, porque cada escrita em disco leva tempo, mesmo que seja para escrever 1 byte somente.
Isso quer dizer que se você sair de seu programa sem usar “close”, provavelmente os últimos 8 kbytes do seu arquivo, se não até mais, não serão gravados adequadamente.
E
entanglement
Dota:
Obrigado Entanglement e Luiz. Agora qual o problema de não usar o close()? Porque nao grava?
Outra coisa deixando o PrintWriter encapsulando tudo, para quebrar as linhas vou ter que usar “\n” mesmo né?!
Não, o println (como mostrei no exemplo) quebra as linhas para você.
Se for usar printf, o quebrador de linhas é o formato especial “%n”.
D
Dota
entanglement:
Dota:
Obrigado Entanglement e Luiz. Agora qual o problema de não usar o close()? Porque nao grava?
Outra coisa deixando o PrintWriter encapsulando tudo, para quebrar as linhas vou ter que usar “\n” mesmo né?!
Não, o println (como mostrei no exemplo) quebra as linhas para você.
Se for usar printf, o quebrador de linhas é o formato especial “%n”.
Vlww cara!!!
ViniGodoy
Antes de dar o close() é bom também chamar o flush().
E não, o close() não faz isso automaticamente. Nenhum stream() tem essa obrigação e eu mesmo já tive problemas assumindo erroneamente isso.
E
ericsoul
Sou iniciante em java alguém ai dá uma força salvar o que é digitado nesse classe main, em um aquivo txt.
public class Main {
publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);while(true){System.out.println("\nMenu Options\n");System.out.println("(1) - Adicionar Pessoa");System.out.println("(2) - Listar");System.out.println("(3) - Busca Por CPF");System.out.println("(4) - Busca Por Nome");System.out.println("(5) - Remover");System.out.print("Please enter your selection:\t");intop=scanner.nextInt();if(op==1){Adicionaradicionar=newAdicionar();UsuarioView.recebeDado("Nome: ");UsuarioView.recebeDado("Sobrenome: ");UsuarioView.recebeDado("CPF: ");Long.parseLong(UsuarioView.recebeDado("Idade:"));Interfaceoperacao=newAdicionar();UsuarioView.exibeMsg(operacao.Operacao());}elseif(op==2){Interfaceoperacao=newListar();UsuarioView.exibeMsg(operacao.Operacao());break;}elseif(op==3){Interfaceoperacao=newBuscarPorCpf();UsuarioView.exibeMsg(operacao.Operacao());}}}
}
public class Adicionar extends Pessoa implements Interface{
@OverridepublicStringOperacao(){FilearquivoEscrever=newFile("F:\\Clientes.txt");try{inti=0;if(!arquivoEscrever.exists()){arquivoEscrever.createNewFile();BufferedWriterwriter=newBufferedWriter(newFileWriter(arquivoEscrever));writer.write(/* TEXTO DIGITADO NO USUARIO VIEW */);writer.newLine();i++;}}catch(IOExceptione){e.printStackTrace();}returnnull;