Ler Aquivo CSV

13 respostas
eclipsenetbeansjava
H

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)

13 Respostas

Rodrigo_Void

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

H

Ja na primeira Linha.

Rodrigo_Void

posta a linha de exemplo

H

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;[telefone removido];0,0000;0,0000;0,0000;;74000055;;OPME;TNUMM;10/10/2012;;;10/10/2012;1;2

Rodrigo_Void

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

darlan_machado

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

Dê uma olhada

H

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

H

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.

Rodrigo_Void
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;[telefone removido];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.

Rodrigo_Void

Oq tem nesta linha AuditoriaEnf.java:1886 ?

H
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];
Rodrigo_Void

Só uma palavra:
DEBUG

H

kkkk FATO!

Criado 27 de junho de 2018
Ultima resposta 27 de jun. de 2018
Respostas 13
Participantes 3