packagemain;importjava.io.FileWriter;importjava.io.File;importjava.io.IOException;classTeste{publicstaticvoidmain(String[]args){StringtextoQueSeraEscrito="Texto que sera escrito2.";FileWriterarquivo;try{arquivo=newFileWriter(newFile("C:/teste.txt"));arquivo.write(textoQueSeraEscrito);arquivo.close();}catch(IOExceptione){e.printStackTrace();}catch(Exceptione){e.printStackTrace();}}}
packagearquivostexto;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileWriter;importjava.util.Scanner;/** * Exemplo de como fazer a leitura e a escrita em arquivos TXT com Java * Para a leitura é feito uso da classe Scanner * * @author Emerson Ribeiro de Mello */publicclassPrincipal{/* atributos */privateStringnomeDoArquivo;/* construtor */publicPrincipal(StringnomeArquivo){this.nomeDoArquivo=nomeArquivo;}/* métodos */publicvoidinserirDados(Stringregistro){FilefArquivo=null;try{fArquivo=newFile(this.nomeDoArquivo);FileWriterfwArquivo=null;// Verifica se o arquivo existe// Se existir, ele abre par adicionar dados// se nao existir, ele cria o arquivoif(fArquivo.exists()==true){fwArquivo=newFileWriter(fArquivo,true);}else{fwArquivo=newFileWriter(fArquivo);}BufferedWriterbw=newBufferedWriter(fwArquivo);//escreve o registro no arquivo e pula uma linha com o \nbw.write(registro+"\n");System.out.println("Registro adicionado com sucesso...");//fecha o arquivobw.close();fwArquivo.close();}catch(Exceptione){System.err.println("Erro ao inserir linhas no arquivo: "+fArquivo);}}publicvoidlistarDados(){ScannerlendoArquivo=null;Filearquivo=null;try{// abrindo o arquivo para leitura// se o arquivo nao existir será disparada uma exceçãoarquivo=newFile(this.nomeDoArquivo);lendoArquivo=newScanner(arquivo);// leia o arquivo linha por linha até chegar ao seu fimwhile(lendoArquivo.hasNextLine()){this.processandoLinha(lendoArquivo.nextLine());}}catch(FileNotFoundExceptione){// tratando quando o arquivo nao existeSystem.err.println("Erro: arquivo nao existe. "+arquivo);}finally{// fechando o scannertry{lendoArquivo.close();}catch(Exceptione){}}}privatevoidprocessandoLinha(Stringlinha){// toda linha do arquivo segue o formato:// nome:telefoneif(linha!=null){// separando os campos através do delimitador ':'String[]campos=linha.split(":");System.out.print("Nome: "+campos[0].trim());System.out.println("\tFone: "+campos[1].trim());System.out.println("--------------------------------------\n");}}publicvoidmenu(){// passando para o objeto da classe Scanner o dispositivo de entrada padrão// que é o tecladoScannerteclado=newScanner(System.in);intop=0;do{System.out.println("..:: Trabalhando com Arquivos Texto ::..");System.out.println("1 - Inserir linha");System.out.println("2 - Listar todo arquivo");System.out.println("3 - Sair");System.out.print("Entre com uma opcao: ");op=teclado.nextInt();switch(op){case1:teclado.nextLine();Stringnome;Stringtelefone;System.out.println("Entre com os dados:");System.out.print("Nome: ");nome=teclado.nextLine();System.out.print("Fone: ");telefone=teclado.nextLine();this.inserirDados(nome+":"+telefone);break;case2:this.listarDados();break;default:System.out.println("Opção inválida!");}}while(op!=3);}publicstaticvoidmain(String[]args){Principalp=newPrincipal("agenda-poo.txt");p.menu();}
gconsentini
então, mas a idéia nao é adicionar linhas do fim do arquivo, e sim no meio do arquivo, vc conhece como?
PedroMorragudo
Ainda não cara. Poste o código que você fez para eu dar uma olhada.
gconsentini
Então, eu to usando o buffered readear, ainda não fiz o codigo até pq não sei, mas a idéia é ler um arquivo e escrever uma linha no meio dele.
tipo, dar um append no meio do arquivo.
rogeriopaguilar
Cara, ve se isso resolve. Nesse código eu fiz gerar um outro arquivo no mesmo diretório com o sufixo _novo. O arquivo original não é alterado, talvez vc tenha que alterar isso.
packageteste;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.FileReader;importjava.io.IOException;importjava.nio.ByteBuffer;importjava.nio.channels.FileChannel;/** * Classe de teste para inserir uma linha num arquivo existente. O método escreverLinhaNoArquivo deve ser chamado <br></br> * com o caminho do arquivo atual, o índice da linha que será inserida no arquivo (o índice da primeira linha <br></br> * é zero, o da segunda é 1 e assim por diante) e o conteúdo que será inserido. <br></br> * Será gerado no mesmo local um arquivo com o mesmo nome e o sufixo _novo ao final do nome, contendo <br></br> * a linha inserida na posição passada como parâmetro. <br></br> * * @author Rogério de Paula Aguilar * */publicclassTesteArquivo{publicstaticvoidescreverLinhaNoArquivo(StringcaminhoArquivo,longlinha,StringconteudoLinha)throwsIOException{if(linha<0){thrownewIllegalArgumentException("O parâmetro linha deve ser >= 0 (0 é o índice da primeira linha)!");}if(conteudoLinha==null){thrownewIllegalArgumentException("O parâmetro conteudoLinha deve ser <> null!");}FilearquivoAntigo=newFile(caminhoArquivo);BufferedReaderraf=newBufferedReader(newFileReader(arquivoAntigo));FileChannelchannelAntigo=null;FileChannelchannelNovo=null;try{StringstrLinha=null;longtamanho=0;longcontadorLinha=0;while(contadorLinha<linha&&(strLinha=raf.readLine())!=null){tamanho+=(strLinha+System.getProperty("line.separator")).getBytes().length;contadorLinha++;}FilearquivoNovo=newFile(caminhoArquivo+"_novo");arquivoNovo.createNewFile();channelAntigo=newFileInputStream(arquivoAntigo).getChannel();channelNovo=newFileOutputStream(arquivoNovo).getChannel();channelNovo.transferFrom(channelAntigo,0,tamanho);bytebstr[]=(conteudoLinha+System.getProperty("line.separator")).getBytes();ByteBufferb=ByteBuffer.wrap(bstr);channelNovo.position(tamanho);channelNovo.write(b);channelAntigo.position(tamanho);channelAntigo.transferTo(tamanho,channelAntigo.size(),channelNovo);}finally{if(raf!=null){raf.close();}if(channelNovo!=null){channelNovo.close();}if(channelAntigo!=null){channelAntigo.close();}}}publicstaticvoidmain(String[]args){try{TesteArquivo.escreverLinhaNoArquivo("/tmp/testeArquivo.txt",3L,"TESTE NOVA LINHA");}catch(IOExceptione){// TODO Auto-generated catch blocke.printStackTrace();}}}