Seguinte fiz um codigo apra ler um arquivo txt, e gravar alguns dados simples, estou fazendo alguns testes, e no arquivo não grava mais de um registro, ele sobrescreve o antigo, ficando como novo, tbm gostaria de saber como fazer pro programa criar o arquivo, caso ele não exista, se existir naum faz nd, segue o codigo abaixo.
Uma dica que irei lhe dar. Se for gravar arquivos textos não binários, utilize o BufferedWriter.
Dessa forma fazemos o seguinte…
Criamos um arquivo pela classe File, depois atribuímos esse objeto a um BufferedWriter do qual iremos evocar toda vez o método write do mesmo para gravar. Não se esqueça de colocar “\n” ou “\r\n” a depender do SO para pular a linha.
Depois é só fechar o canal chamando o método close e pronto.
Felagund
poderia me mostrar uma parte de um codigo para eu analisar como devo proceder?
Grinvon
Mas como eu disse, se seguir da forma como falei você conseguirá escrever dados em um arquivo de texto de forma simples e rápida.
Felagund
mais continuei com omsm problema
eu quero inserir novos cadastros e o programa inseri sempre um em cima do outro, isso que eu gostaria de corrigir, pensei em adicionar um ] no final do txt para qdo o programa encontrar algum ele inserir em baixo, só não sei como fazer
Grinvon
Sua lógica está mais complexa e desnecessária, não precisa de forma alguma inserir um “]” para que ele substitua por um linha para pular, apenas adicione o que eu falei antes, você precisa saber que para pular linha segue da forma dos caracteres especiais como “\n” ou “\r\n”, da mesma forma que ocorre no C/C++.
Tente fazer o código da forma como falei, assim você irá estimular a sua lógica e raciocínio e então poderei lhe ajudar tirando suas dúvidas em cima do código.
Felagund
eu substitui os fos e fis por BufferedWriter e BufferedReader, mas no txt fica a msm coisa, eu so gostaria de saber como faço para naum ficar sobreescrevendo as dados que já tenho, se tem algum meio?
vou postar como ficou meu codigo
importjava.io.*;importjavax.swing.JOptionPane;publicclassManipulandoArquivos{publicManipulandoArquivos(){}//Insere uma nova gração no arquivo de textopublicvoidNovaGrav(Stringname,StringSobrenome,intnReg,StringRG)throwsIOException{try{//abre o arquivoFilearqui=newFile("cadastro.txt");//adiciona o arquivo para ser escritoBufferedWriterbw=newBufferedWriter(newFileWriter(arqui));Stringaux;aux="\nNumero: "+nReg+" ";bw.write(aux);//escreve no arquivoaux="\nNome: "+name+" ";bw.write(aux);aux="\nSobrenome: "+Sobrenome+" ";bw.write(aux);aux="\nRG: "+RG+" "+"]";bw.write(aux);bw.close();//fecha arquivo de escrita}catch(FileNotFoundExceptionex){ex.printStackTrace();}}//Le o arquivopublicStringLeArquivo()throwsIOException{//StringBuilder para formar uma string para exibir na tela os cadastrosStringBuildersb=newStringBuilder();try{//define qual é o arquivoFilearqui=newFile("cadastro.txt");//adiciona o arquivo para ser lidoBufferedReaderbr=newBufferedReader(newFileReader(arqui));intln;//declara uma linhawhile((ln=br.read())!=-1){//verifica enqto a linha naum for = -1if((char)ln==']'){//se o caracter da linha for = a ] sb.append("\n");//pula uma linha}else{//senaumsb.append((char)ln);//adiciona o caracter}}}catch(FileNotFoundExceptionex){JOptionPane.showMessageDialog(null,ex.getMessage()+"","ERRO",JOptionPane.ERROR_MESSAGE);System.exit(0);}returnsb.toString();//retorna string formada}}
Grinvon
Veja o código abaixo, irei comentá-lo logo em seguida…
Você fez de forma parecida com esse, não entanto quando utilizo “\r\n” para pular a linha, criei apenas uma referência para dois objetos do tipo String, no primeiro ele atribui o valor “ET” escreve no buffer do arquivo, e então perde essa String, depois a referência aponta para outra String com o valor de “Minha casa” antecedido pelo retorno e pulagem de linha.
Dou um flush no final e fecho a conexão do BufferedWriter, então ele criou um arquivo de texto do qual não tem valores substituidos
W
wolbert
coloque estas linhas de codigo no seu programa
Este true diz que é para ele escrever sempre em uma linha nova
fw = new FileWriter(diretorio, true);