Erro ao ler arquivo com muitas linhas e tentar inserir dados no banco

4 respostas
programaçãojava
J

Tenho um codigo java que lê um txt e sem seguida grava no banco,
o txt tem 8500 linhas, porem ele da erro quando lê 4185 linhas.
Segue o codigo…

public void actionPerformed(ActionEvent ae) {

if (ae.getSource().equals(b1)) {
            arquivo = File.separator;
            JFileChooser fc = new JFileChooser(new File(arquivo));
            fc.showOpenDialog(rootPane);
            fc.getSelectedFile();
            File selFile = fc.getSelectedFile();
            BufferedReader br;
            try {
                br = new BufferedReader(new FileReader(selFile));
                String linha;
                while (br.readLine() != null) {
                    linha = br.readLine();
                    p = linha.substring(0, 12);
                    //System.out.println(p);
                    d = linha.substring(12, 18);
                    //System.out.println(d);
                    h = linha.substring(18, 22);
                    //System.out.println(h);
                    r = linha.substring(22, 29);
                    //System.out.println(r);
                    s = linha.substring(29, 46);
                    //System.out.println(s);

                    String query = "insert into COLETA (n_pis, data,hora,n_relogio,n_serial) values('" + p.toString() + "','" + d.toString() + "','" + h.toString() + "','" + r.toString() + "','" + s.toString() + "')";
                    Conexao.inserir(query);

                }

Título

E acontece esse erro:

Exception in thread AWT-EventQueue-0 java.lang.NullPointerException

at aplicaçao.APLICAÇAO$Listener.actionPerformed(APLICAÇAO.java:70)

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)

Poderiam me ajudar?
Obrigado!

4 Respostas

TerraSkilll

Sempre dá erro nessa mesma linha? Tem algo especial ou diferente nessa linha do arquivo? Algum caractere especial, caractere a menos, ou uma linha vazia por exemplo?

O erro está sendo apontado na linha 70 do seu código, o que tem nela? O erro ocorre em alguma das chamadas à substring ou é no Conexao.inserir()?

Você tentou debugar para ver qual valor está nulo? Se o erro ocorre numa mesma linha sempre, copie essa linha para um arquivo e teste a leitura somente dela, para ver qual valor está nulo (e causando nullpointerexception).

PS: das próximas vezes, procure dar um título mais descritivo à sua pergunta. Somente “Java” não ajuda muito.

Abraço.

J

Não tem nada de diferente, o txt e gerado a partir de um relógio de ponto, todos os dados tem o mesmo padrão. Sim ocorre sempre na mesma linha, a linha 70 e o comando onde a Variável p = linha.substring(0,12);
Porem fiz um teste e quebrei o arquivo coloquei menos linhas, e percebi que ele não lê todo o arquivo so a metade.

Att;

TerraSkilll

Teste somente com essa linha, num arquivo com uma linha só (ou umas 5 a 10 linhas, incluindo a que dá problema). Dê um print na variável linha antes de executar o substring, para ver se há algo de anormal.

Outra opção é você ler todo o arquivo para um array de objetos (crie um objeto registro, por exemplo), e só depois fazer a inclusão. Assim, você pode gerar um log das linhas que dão erro, para analisar posteriormente.

Abraço.

J

Consegui resolver, apenas trocando o comando while (br.readLine() != null) … pelo comando while (br.ready()) …

Obrigado pela ajuda
Abç;

Criado 26 de maio de 2017
Ultima resposta 26 de mai. de 2017
Respostas 4
Participantes 2