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

Asked

Viewed 4,781 times

2

I am beginner in programming and am making a small application that should register products, delete, edit, organize, control inventory, cost price, selling price, profit margin, etc.

So far I have managed to get a file . txt to store the product class objects in different lines, thus:

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, so:

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 is closed and I will open it later) I need to store each line of txt in an object Arraylist and then do what is necessary (eg how to sort by price). Any light? Am I on the right track? Is there another way out? Thank you all!

  • Is it a college job? Does it have to be a text file? Could I use JSON? Why not a database?

  • It is a work of a course that I did, the teacher left open for us to use creativity and as it is something that he did not teach would have to be as simple as possible, then I thought of storing in txt file (if it is simpler) but it can be done differently... as long as I understand, because I am beginner

2 answers

0


Thanks for all your help! I managed to solve so:

    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);
    }
    */

}
  • You can read all the lines like this: List<String> linhas = Files.readAllLines(Paths.get("arquivo.txt"), StandardCharsets.UTF_8);

  • 1

    To use | , in the split, try so: line.split(Pattern.quote("|"));

-1

See if it helps you:

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

    }
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.