Gravando em arquivo txt

9 respostas
F

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.

import java.io.*;
import javax.swing.JOptionPane;

public class ManipulandoArquivos {
    
    
    
    public ManipulandoArquivos(){
        
    }
    
    
    public void NovaGrav( String name, String Sobrenome, int nReg, String RG ) throws IOException{
        
        try{
            
            File arqui =  new File( "cadastro.txt" );
            FileOutputStream fos = new FileOutputStream(arqui);
            String aux;
            aux = "\n" + nReg + " ";
            fos.write( aux.getBytes() );
            aux = "\n" + name + " ";
            fos.write( aux.getBytes() );
            aux = "\n" + Sobrenome + " ";
            fos.write( aux.getBytes() );
            aux = "\n" + RG + " " + "\n";
            fos.write( aux.getBytes() );
            
            fos.close();
            
            
        }catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
        
        
    }
    
    public String LeArquivo() throws IOException{
        
        StringBuilder sb = new StringBuilder();

        try{
            
            File arqui =  new File( "cadastro.txt" );
            FileInputStream fis = new FileInputStream(arqui);
            
            int ln;
            while( (ln = fis.read()) !=  -1 ){
                
                sb.append( (char)ln );
                if( (char)ln == ' ' ){
                    
                sb.append( "\n" );
                
                }
            }
            
            
            
        }catch (FileNotFoundException ex) {
            JOptionPane.showMessageDialog( null, ex.getMessage() + "", "ERRO", JOptionPane.ERROR_MESSAGE );
            System.exit(0);
        }
        
        return sb.toString();
        
    }
    
}

9 Respostas

G

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

poderia me mostrar uma parte de um codigo para eu analisar como devo proceder?

G

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

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

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

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

import java.io.*;
import javax.swing.JOptionPane;

public class ManipulandoArquivos {
    
    
    
    public ManipulandoArquivos(){
        
    }
    
    
    //Insere uma nova gração no arquivo de texto
    public void NovaGrav( String name, String Sobrenome, int nReg, String RG ) throws IOException{
        
        try{
            //abre o arquivo
            File arqui =  new File( "cadastro.txt" );
            //adiciona o arquivo para ser escrito
            BufferedWriter bw = new BufferedWriter( new FileWriter( arqui ) ) ;
            String aux;
            aux =  "\nNumero: " + nReg + " ";
            bw.write( aux ); //escreve no arquivo
            aux = "\nNome: " + name + " ";
            bw.write( aux );
            aux = "\nSobrenome: " + Sobrenome + " ";
            bw.write( aux );
            aux = "\nRG: " + RG + " " + "]";
            bw.write( aux );
            
            bw.close();//fecha arquivo de escrita
            
        }catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
        
        
    }
    //Le o arquivo
    public String LeArquivo() throws IOException{
        //StringBuilder para formar uma string para exibir na tela os cadastros
        StringBuilder sb = new StringBuilder();

        try{
            //define qual é o arquivo
            File arqui =  new File( "cadastro.txt" );
            //adiciona o arquivo para ser lido
            BufferedReader br = new BufferedReader( new FileReader( arqui ) ) ;
            int ln;//declara uma linha
            while( (ln = br.read()) !=  -1 ){
                //verifica enqto a linha naum for = -1
                
               if( (char)ln == ']' ){//se o caracter da linha for = a ] 
                    
                sb.append( "\n" );//pula uma linha
                
                }else{//senaum
                   
                   sb.append( (char)ln );//adiciona o caracter
                   
                }
            }
            
            
            
        }catch (FileNotFoundException ex) {
            JOptionPane.showMessageDialog( null, ex.getMessage() + "", "ERRO", JOptionPane.ERROR_MESSAGE );
            System.exit(0);
        }
        
        return sb.toString();//retorna string formada
        
    }
    
}
G

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

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);

while (iter.hasNext()){
			String valor = (String) iter.next();
			String txt = valor + "\n";
			fw.write(txt);
		}
		fw.close();
L

Olá pessoa preciso de uma ajuda ai
bom eu tenho um programa para fazer com a seguinte situação

ele pega lê um arquivo XML e depois edita o mesmo…
por fim ele insere o dados dentro de um banco de dados qualquer

bom estou precisando muito disso se alguem ai puder me ajudar…
vlw.

Criado 4 de dezembro de 2006
Ultima resposta 5 de jan. de 2009
Respostas 9
Participantes 4