Excluír linha de arquivo txt

1 resposta Resolvido
Raphael_Luiz_Schneid

Para remover uma linha de um arquivo txt, eu tenho que criar um arquivo temporário contendo as linhas do arquivo original, exceto a que eu quero remover, deletar o arquivo original, e renomear o arquivo. Porém mesmo pesquisando e tentando não consigo fazer com que dê certo. Meu código: ClasseJava:

package Modelos;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Pessoas {

    private String nome;
    private String sexo;
    private String idade;

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public String getIdade() {
        return idade;
    }

    public void setIdade(String idade) {
        this.idade = idade;
    }

    public List<Pessoas> carregar()  {
        List<Pessoas> lista = new ArrayList<>();
        try {
            FileReader fileReader = new FileReader("Pessoas.txt");
            BufferedReader bw = new BufferedReader(fileReader);
            String linha;
            while((linha=bw.readLine()) != null){
                Pessoas pessoa = new Pessoas();
                String[] dados = linha.split(";");
                pessoa.setNome(dados[0]);
                pessoa.setSexo(dados[1]);
                pessoa.setIdade(dados[2]);
                
                lista.add(pessoa);
            }
            bw.close();
            
        } catch (Exception error) {
            Logger.getLogger(Pessoas.class.getName()).log(Level.SEVERE, null, error);

        }
        return lista;

    }
    
    public String Salvar() {

        try {
            FileWriter fw = new FileWriter("Pessoas.txt", true);
            PrintWriter pw = new PrintWriter(fw);
            String pessoa = this.nome + ";" + this.sexo + ";" + this.idade;
            pw.println(pessoa);
            pw.flush();
            pw.close();
            fw.close();

        } catch (IOException ex) {
            Logger.getLogger(Pessoas.class.getName()).log(Level.SEVERE, null, ex);
        }

        return "Cadastrado";

    }

    private void bw(String string) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    private void br(String string) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}

Meu código: FormJFrame:

package Apresentação;

import Modelos.Pessoas;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

public class JFrameCadastroClientes extends javax.swing.JFrame {

    public JFrameCadastroClientes() {
        initComponents();
        this.carregar();
    }

    private void excluir() {
        
        ((DefaultTableModel) jTableCadastroClientes.getModel()).removeRow(jTableCadastroClientes.getSelectedRow());
        
    }

    public void carregar() {

        Pessoas pessoas = new Pessoas();

        DefaultTableModel val = (DefaultTableModel) jTableCadastroClientes.getModel();
        while (val.getRowCount() > 0) {
            val.removeRow(0);
        }
        List<Pessoas> cadastros = pessoas.carregar();
        for (Pessoas pessoa : cadastros) {
            val.addRow(new String[]{pessoa.getNome(), pessoa.getSexo(), pessoa.getIdade()});
        }

    }

    private void gravar() {
        Pessoas pessoas = new Pessoas();
        pessoas.setNome(jTextFieldNome.getText().trim());
        pessoas.setSexo(jTextFieldSexo.getText().trim());
        pessoas.setIdade(jTextFieldIdade.getText().trim());
        if ("".equals(jTextFieldNome.getText().trim())) {

            JOptionPane.showMessageDialog(null, "Digite o nome");
            jTextFieldNome.requestFocus();

        } else if ("".equals(jTextFieldSexo.getText().trim())) {

            JOptionPane.showMessageDialog(null, "Digite o Sexo");
            jTextFieldSexo.requestFocus();

        } else if ("".equals(jTextFieldIdade.getText().trim())) {

            JOptionPane.showMessageDialog(null, "Digite a Idade");
            jTextFieldIdade.requestFocus();

        } else {
            JOptionPane.showMessageDialog(null, pessoas.Salvar());
            this.carregar();
            jTextFieldNome.setText("");
            jTextFieldSexo.setText("");
            jTextFieldIdade.setText("");

            jTextFieldNome.requestFocus();
        }
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jTextFieldIdade = new javax.swing.JTextField();
        jButtonExcluir = new javax.swing.JButton();
        jButtonGravar = new javax.swing.JButton();
        jTextFieldPessoas = new javax.swing.JTextField();
        jButtonPesquisar = new javax.swing.JButton();
        jScrollPaneCadastroPessoas = new javax.swing.JScrollPane();
        jTableCadastroClientes = new javax.swing.JTable();
        jLabelNome = new javax.swing.JLabel();
        jLabelSexo = new javax.swing.JLabel();
        jLabelIdade = new javax.swing.JLabel();
        jTextFieldNome = new javax.swing.JTextField();
        jTextFieldSexo = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jTextFieldIdade.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N

        jButtonExcluir.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jButtonExcluir.setText("Excluir");
        jButtonExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonExcluirActionPerformed(evt);
            }
        });

        jButtonGravar.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jButtonGravar.setText("Gravar");
        jButtonGravar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonGravarActionPerformed(evt);
            }
        });

        jTextFieldPessoas.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N

        jButtonPesquisar.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jButtonPesquisar.setText("Pesquisar");
        jButtonPesquisar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonPesquisarActionPerformed(evt);
            }
        });

        jTableCadastroClientes.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        jTableCadastroClientes.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Nome", "Sexo", "Idade"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
        });
        jScrollPaneCadastroPessoas.setViewportView(jTableCadastroClientes);

        jLabelNome.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabelNome.setText("Nome : ");

        jLabelSexo.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabelSexo.setText("Sexo : ");

        jLabelIdade.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabelIdade.setText("Idade : ");

        jTextFieldNome.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N

        jTextFieldSexo.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabelNome)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jTextFieldNome, javax.swing.GroupLayout.PREFERRED_SIZE, 442, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jTextFieldPessoas, javax.swing.GroupLayout.PREFERRED_SIZE, 506, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButtonPesquisar)
                .addGap(0, 0, Short.MAX_VALUE))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButtonExcluir)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButtonGravar))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabelIdade)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jTextFieldIdade, javax.swing.GroupLayout.PREFERRED_SIZE, 108, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabelSexo)
                        .addGap(18, 18, 18)
                        .addComponent(jTextFieldSexo, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPaneCadastroPessoas, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextFieldPessoas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButtonPesquisar))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelNome)
                    .addComponent(jTextFieldNome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabelSexo)
                            .addComponent(jTextFieldSexo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabelIdade)
                            .addComponent(jTextFieldIdade, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jButtonExcluir)
                            .addComponent(jButtonGravar)))
                    .addComponent(jScrollPaneCadastroPessoas, javax.swing.GroupLayout.PREFERRED_SIZE, 215, javax.swing.GroupLayout.PREFERRED_SIZE)))
        );

        pack();
    }// </editor-fold>                        

    private void jButtonExcluirActionPerformed(java.awt.event.ActionEvent evt) {                                               

        this.excluir();
        

    }                                              

    private void jButtonGravarActionPerformed(java.awt.event.ActionEvent evt) {                                              

        this.gravar();


    }                                             

    private void jButtonPesquisarActionPerformed(java.awt.event.ActionEvent evt) {                                                 

    }                                                

    public static void main(String args[]) {
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(JFrameCadastroClientes.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(JFrameCadastroClientes.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(JFrameCadastroClientes.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(JFrameCadastroClientes.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new JFrameCadastroClientes().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButtonExcluir;
    private javax.swing.JButton jButtonGravar;
    private javax.swing.JButton jButtonPesquisar;
    private javax.swing.JLabel jLabelIdade;
    private javax.swing.JLabel jLabelNome;
    private javax.swing.JLabel jLabelSexo;
    private javax.swing.JScrollPane jScrollPaneCadastroPessoas;
    private javax.swing.JTable jTableCadastroClientes;
    private javax.swing.JTextField jTextFieldIdade;
    private javax.swing.JTextField jTextFieldNome;
    private javax.swing.JTextField jTextFieldPessoas;
    private javax.swing.JTextField jTextFieldSexo;
    // End of variables declaration                   
}

1 Resposta

darlan_machado
Solucao aceita

Não, não precisa disso.
Mantenha em memória. Apenas isso.

Criado 23 de abril de 2019
Ultima resposta 23 de abr. de 2019
Respostas 1
Participantes 2