How to store data from a .txt file in an object - Java

2

I'm a beginner in programming and I'm making a small application that should register products, delete, edit, organize, track inventory, cost price, sales price, profit margin, etc.

So far I've been able to get a .txt file to store the objects of the product class on different lines, like this:

public void gravaProduto() throws IOException{

    FileWriter arquivo = new FileWriter("E:\Documentos\NetBeansProjects\Experimentacao3\cadastro.txt",true);
    PrintWriter gravarArquivo = new PrintWriter(arquivo);

    for (Produto p : produtos) {
        gravarArquivo.println(p);
    }

    arquivo.flush(); //libera a gravaçao
    arquivo.close(); //fecha o arquivo
}

I was also able to read the file, like this:

public void leProduto() throws IOException{
    String linha = "a";

    FileReader arq = new FileReader("E:\Documentos\NetBeansProjects\Experimentacao3\cadastro.txt");
    //armazenando conteudo no arquivo no buffer
    BufferedReader lerArq = new BufferedReader(arq);
    //lendo a primeira linha
    //String linha = lerArq.readLine();
    //a variavel linha recebe o valor 'null' quando chegar no final do arquivo
    while (linha != null){
        System.out.printf("%s\n",linha);
        //lendo a segundo até a última
        linha = lerArq.readLine();

    }
    arq.close();

}

My problem is: (after the application terminates and I will open it later) I need to store each line of the txt in an ArrayList of objects and then do whatever it takes sort by price). Any light? I'm in the right way? Do you have another outlet? Thank you all!

    
asked by anonymous 16.12.2015 / 03:36

2 answers

0

Thanks for everyone's help! I was able to solve it like this:

    public void leProduto() throws IOException{

    FileReader arq = new FileReader("E:\Documentos\NetBeansProjects\Experimentacao3\cadastro.txt");
    //armazenando conteudo no arquivo no buffer
    BufferedReader lerArq = new BufferedReader(arq);
    //lendo a primeira linha
    String linha = lerArq.readLine();

    //ArrayListe para armazenar os objetos da leitura
    ArrayList a = new ArrayList();

    //a variavel linha recebe o valor 'null' quando chegar no final do arquivo
    while (linha != null){
        //Criando o objeto p2 da classe produto
        Produto p2 = new Produto();
        //criando um array que recebe os atributos divididos pelo split
        String[] atributos = linha.split("#");

        //Se quiser usar outro separado use:
        //String[] atributos = linha.split(Pattern.quote("|"));

        //passando os "atributos" da array para o objeto p2
        p2.cod = atributos[0];
        p2.nome = atributos[1];
        //adicionando objeto p2 no ArrayList a
        a.add(p2);
        //capturando a proxima linha
        linha = lerArq.readLine();
    }

    /* Se quiser exibir o resultado (importante sobrescrever o método toString()
    for (Object p : a) {
        System.out.println(p);
    }
    */

}
    
16.12.2015 / 16:00
-1

See if it helps:

public class Exemplo {

    public static final String SEPARADOR = "#";
    public static final String ARQUIVO = "cadastro.txt";


    public static void main(String[] args) {
        Produto produto = new Produto();
        produto.setNome("Produto 1sss");
        produto.setPreco(15.5f);

        Produto produto2 = new Produto();
        produto2.setNome("Produto ddd");
        produto2.setPreco(25.5f);

        try {
            gravaProduto(produto);
            gravaProduto(produto2);


            List<Produto> produtos = leProduto();

            for(final Produto p : produtos){
                System.out.println(p.getNome()+", "+p.getPreco());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }



    /**
     * Adiciona o Produto, passado via parametro
     * @param produto
     * @throws IOException
     */
    public static void gravaProduto(Produto produto) throws IOException{
        FileWriter arquivo = new FileWriter(ARQUIVO,true);
        PrintWriter gravarArquivo = new PrintWriter(arquivo);
        gravarArquivo.println(produto.gerarString());
        arquivo.flush(); //libera a gravaçao
        arquivo.close(); //fecha o arquivo
    }

    public static List<Produto> leProduto() throws IOException{


        //Lista que vamos retornar
        List<Produto> list = new ArrayList<Produto>(0);
        FileReader arq = new FileReader(ARQUIVO);
        //armazenando conteudo no arquivo no buffer
        BufferedReader lerArq = new BufferedReader(arq);
        //lendo a primeira linha
        String linha = lerArq.readLine();
        //a variavel linha recebe o valor 'null' quando chegar no final do arquivo
        while (linha != null){
//          System.out.printf("%s\n",linha);
            //lendo a segundo até a última
            linha = lerArq.readLine();
            // Passamos a linha para popular o objeto, 
            // se não for vazia
            if(null != linha && !"".equals(linha) ){
                Produto produto = new Produto(linha);
                list.add(produto);
            }

        }
        arq.close();

        return list;

    }



    /**
     * Esta classe guarda a s informacnoes do Produtos
     */
    static class Produto{

        /**
         * Contrutor padrão
         */
        public Produto() {      }
        /**
         * recebe a linha para popular o Objeto
         * @param line
         */
        public Produto(String line) {   
            if(null != line ){
                //Vamos quebrar a linha no separador...
                String[] valores = line.split(SEPARADOR);
                // se não for nulo, vamos setar os valores
                if(null != valores){
                    setNome(valores[0]);
                    setPreco(Float.valueOf(valores[1]));
                    // se possuir mais campos, irá adiionar aqui, seguindo a ordem 
                }
            }
        }
        private String nome; 
        private Float preco;
        public String getNome() {
            return nome;
        }
        /**
         * Temos que garantir que esta String não possua o SEPARADOR
         * Senão irá bugar
         * @param nome
         */
        public void setNome(String nome) {
            if(null != nome){
                if(nome.contains(SEPARADOR)){
                    nome = nome.replaceAll(SEPARADOR, " ");
                }
            }
            this.nome = nome;
        }
        public Float getPreco() {
            return preco;
        }
        public void setPreco(Float preco) {
            this.preco = preco;
        }

        /**
         * Vamos concatenar os dados para salvar..
         */
        public String gerarString(){
            final StringBuffer buffer = new StringBuffer();
            if(null != getNome()){
                buffer.append(getNome());
            }
            //  inserimos ao separador
            buffer.append(SEPARADOR);
            if(null != getPreco()){
                buffer.append(getPreco());
            }
            return buffer.toString();
        }

    }
}
    
16.12.2015 / 12:04