Adicionar informações de arquivo txt em jtable

O meu programa lê os arquivos de um diretório e passa as informações através de splits para dentro da jtable. O problema é que só está passando as informações do primeiro arquivo que está na pasta e os outros ele somente lê e não passa para a jtable. O que posso estar fazendo errado?

Sem postar o código das classes, fica difícil adivinhar.

Segue o código…

public void populaTabela() {
try {
File arquivos[];
File diretorio = new File(“C:\Users\User\Desktop”);

        // lista somente arquivos TXT
        arquivos = diretorio.listFiles(new FileFilter() {
            public boolean accept(File pathname) {
                return pathname.getName().toLowerCase().endsWith(".txt");
            }
        });

        String linha = "";
        String col1 = "";
        String col2 = "";
        String col3 = "";
        String col4 = "";
        String exercicio[] = new String[200];
        int indice = 0;
        int nrErros = 0;

        if (diretorio.isDirectory()) {

            arquivos = diretorio.listFiles();
            

            for (File arquivo : arquivos) {
                BufferedReader reader = new BufferedReader(new FileReader("C:\\Users\\User\\Desktop\\" + arquivo.getName()));
                DefaultTableModel modelo = (DefaultTableModel) jTable1.getModel();
                modelo.setNumRows(0);
                jTable1.setModel(modelo);
                
                while ((linha = reader.readLine()) != null) {
                        switch (indice) {
                            case 0:
                                col1 = linha.split("\\:")[1];
                                break;
                            case 1:
                                col2 = linha.split("\\:")[1];
                                break;
                            case 2:
                                col3 = linha.split("\\:")[1];
                                break;
                            case 3:
                                col4 = linha.split("\\:")[1];
                                break;
                            default:
                                System.out.println(linha);
                                break;
                        }

                        indice++;   
                }
                  
                linha = col1 + ":" + col2 + ":" + col3 + ":" + col4;
                modelo.addRow(linha.split("\\:"));
                
            }

      }

    } catch (IOException e) {
    }
}

Sem saber o formato do arquivo e sem ver o código completo, fica mais difícil entender sua necessidade.

Mas acredito que o código abaixo esteja mais próximo do que você procura:

private static final FileFilter SOMENTE_TXT = new FileFilter() {

    public boolean accept(File file) {
        return file.getName().toLowerCase().endsWith(".txt");
    }
};

public void populaTabela() {
    try {
        DefaultTableModel modelo = (DefaultTableModel) jTable1.getModel();
        modelo.setNumRows(0);

        File diretorio = new File("C:\\Users\\User\\Desktop");
        if (diretorio.isDirectory()) {
            File[] arquivos = diretorio.listFiles(SOMENTE_TXT);
            for (File arquivo : arquivos) {
                BufferedReader reader = new BufferedReader(new FileReader(arquivo));
                String linha = null;
                while ((linha = reader.readLine()) != null) {
                    String[] colunas = linha.split("\\:");
                    modelo.addRow(colunas);
                }
                reader.close();
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Sim, o problema era que isto aqui:
modelo = (DefaultTableModel) jTable1.getModel();
Tinha que estar fora do laço for, eu estava fazendo de forma local e não global, ficava sempre pegando um dos arquivos. Além disso isso aqui modelo.addRow(colunas); para a quantidade de incrementos do for, eu não estava fazendo!
Obrigado pela ajuda! Resolvido!

1 curtida