Ler Aquivo CSV

Bom dia pessoal, tenho um metodo que lê um arquivo csv, ele esta funcionando em partes. Estou tentando ler um arquivo que contem 24 colunas, porem ele só esta reconhecendo 22. Nao estou conseguindo evoluir quanto a isso.

voces podem me ajudar?

segue o metodo:

try {
JFileChooser abrir = new JFileChooser();
int retorno = abrir.showOpenDialog(null);
if (retorno==JFileChooser.APPROVE_OPTION) {
String caminho = abrir.getSelectedFile().getAbsolutePath();
diretorioMaterial.setText(caminho);
}

        BufferedReader br = new BufferedReader(new FileReader(new File(diretorioMaterial.getText())));
        List<String[]> elements = new ArrayList<String[]>();
        String line = null;
        while((line = br.readLine())!=null) {
            String ret[];
            ret = line.split(";");
            elements.add(ret);
        }
                  br.close();
        
        String[] columNames = new String[] {
                "CODIGO_TISS                  ",
                "NOME_COMERCIAL               ",
                "DESCRICAO_PRODUTO            ",
                "ESPECIALIDADE_PRODUTO        ",
                "CLASSIFICACAO_PRODUTO_ANVISA ",
                "APRESENTACAO_COMERCIAL       ",
                "UNIDADE_FRACAO               ",
                "CNPJ_FABRICANTE              ",
                "DETENTOR_REGISTRO_ANVISA     ",
                "REGISTRO_ANVISA              ",
                "PRECO_UNICO                  ",
                "PRECO_FABRICA                ",
                "VALOR_INTERCAMBIO            ",
                "OBSERVACOES                  ",
                "REFERENCIA_ANTERIOR          ",
                "REFERENCIA_TAMANHO_MODELO    ",
                "TIPO_DE_PRODUTO              ",
                "TIPO_CODIFICACAO             ",
                "DATA_INICIO_VIGENCIA         ",
                "DATA_FIM_VIGENCIA            ",
                "MOTIVO_DE_INSERCAO           ",
                "DATA_FIM_IMPLANTACAO         ",
                "CODIGO_SIMPRO                ",
                "DESCRICAO_SIMPRO             ",
            "a",
            "b"
            };

        Object[][] content = new Object[elements.size()][24];

        for(int i=0; i<elements.size(); i++) {
            content[i][0]  = elements.get(i)[0];
            content[i][1]  = elements.get(i)[1];
            content[i][2]  = elements.get(i)[2];
            content[i][3]  = elements.get(i)[3];
            content[i][4]  = elements.get(i)[4];
            content[i][5]  = elements.get(i)[5];
            content[i][6]  = elements.get(i)[6];
            content[i][7]  = elements.get(i)[7];
            content[i][8]  = elements.get(i)[8];
            content[i][9]  = elements.get(i)[9];
            content[i][10] = elements.get(i)[10];
            content[i][11] = elements.get(i)[11];
            content[i][12] = elements.get(i)[12];
            content[i][13] = elements.get(i)[13];
            content[i][14] = elements.get(i)[14];
            content[i][15] = elements.get(i)[15];
            content[i][16] = elements.get(i)[16];
            content[i][17] = elements.get(i)[17];
            content[i][18] = elements.get(i)[18];
            content[i][19] = elements.get(i)[19];
            content[i][20] = elements.get(i)[20];
            content[i][21] = elements.get(i)[21];                
            content[i][22] = elements.get(i)[22];
            content[i][23] = elements.get(i)[23];
        }
                  
    } catch (HeadlessException | IOException ex) {
    }

segue o erro:

Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: 22
at telas.AuditoriaEnf.carregaTabelaTnummMaterial(AuditoriaEnf.java:1886)
at telas.AuditoriaEnf.carregaArquivoTnummMaterial(AuditoriaEnf.java:1547)
at telas.AuditoriaEnf.jButton15ActionPerformed(AuditoriaEnf.java:7042)
at telas.AuditoriaEnf.access$8800(AuditoriaEnf.java:69)
at telas.AuditoriaEnf$93.actionPerformed(AuditoriaEnf.java:6202)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

ele já dá erro ao ler a primeira linha em em alguma específica?

Ja na primeira Linha.

posta a linha de exemplo

Segue a primeira linha separadas por ( ; )

74000055;PLACA 1/3 TUBO 3,5MM PARA PEQUENOS FRAGMENTOS;PLACA TERCO TUBULAR EM ACO INOXIDAVEL, PARA USO COMO PLACA DE TENSAO, NEUTRALIZACAO OU APOIO DA FIBULA, ULNA DISTAL, OLECRANO E METATARSO, UTILIZADA EM CONJUNTO COM PARAFUSO CORTICAL OU ESPONJOSO, PERMITINDO A RECUPERACAO DE FRATURAS DE MEMBROS INFERIORES;ORTOPEDIA E TRAUMATOLOGIA;ORTESES;EMBALAGEM UNICA;UN;60.856.937/0001-95;ORTOCIR ORTOPEDIA CIRURGIA LTDA;10314800037;0,0000;0,0000;0,0000;;74000055;;OPME;TNUMM;10/10/2012;;;10/10/2012;1;2

rodei um split nisso e o length é 24!
Seu problema n é ali, precisa debugar pra encontrar onde é

O que está acontecendo é que os campos vazios não estão sendo lidos.

Dê uma olhada

sim… to quebrando a cabeça aqui… mais nao estou evoluindo… kkkkkk

sobre campos vazio eu acredito que nao seja… pq ele esta explodindo erro de length -2, e na linha existe 4 campos vazio…

entao nao tem logica.

String s = "74000055;PLACA 1/3 TUBO 3,5MM PARA PEQUENOS FRAGMENTOS;PLACA TERCO TUBULAR EM ACO INOXIDAVEL, PARA USO COMO PLACA DE TENSAO, NEUTRALIZACAO OU APOIO DA FIBULA, ULNA DISTAL, OLECRANO E METATARSO, UTILIZADA EM CONJUNTO COM PARAFUSO CORTICAL OU ESPONJOSO, PERMITINDO A RECUPERACAO DE FRATURAS DE MEMBROS INFERIORES;ORTOPEDIA E TRAUMATOLOGIA;ORTESES;EMBALAGEM UNICA;UN;60.856.937/0001-95;ORTOCIR ORTOPEDIA CIRURGIA LTDA;10314800037;0,0000;0,0000;0,0000;;74000055;;OPME;TNUMM;10/10/2012;;;10/10/2012;1;2";
        String[] v = s.split(";");
        System.out.println(v.length);
        for (int i = 0; i < v.length; i++) {
            System.out.println(v[i]);
        }

Ta printando os campos vazios tbm.

Oq tem nesta linha AuditoriaEnf.java:1886 ?

content[i][0] = elements.get(i)[0];
content[i][1] = elements.get(i)[1];
content[i][2] = elements.get(i)[2];
content[i][3] = elements.get(i)[3];
content[i][4] = elements.get(i)[4];
content[i][5] = elements.get(i)[5];
content[i][6] = elements.get(i)[6];
content[i][7] = elements.get(i)[7];
content[i][8] = elements.get(i)[8];
content[i][9] = elements.get(i)[9];
content[i][10] = elements.get(i)[10];
content[i][11] = elements.get(i)[11];
content[i][12] = elements.get(i)[12];
content[i][13] = elements.get(i)[13];
content[i][14] = elements.get(i)[14];
content[i][15] = elements.get(i)[15];
content[i][16] = elements.get(i)[16];
content[i][17] = elements.get(i)[17];
content[i][18] = elements.get(i)[18];
content[i][19] = elements.get(i)[19];
content[i][20] = elements.get(i)[20];
content[i][21] = elements.get(i)[21];
content[i][22] = elements.get(i)[22]; Linha 1886 AQUI…
content[i][23] = elements.get(i)[23];

Só uma palavra:
DEBUG

kkkk FATO!