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.
F
Felagund
poderia me mostrar uma parte de um codigo para eu analisar como devo proceder?
G
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.
F
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
G
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.
F
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}}
G
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);