2014-07-24 70 views
4

我试图读取一个文本文件,其中包含英文单词和其他语言的含义[sinhala],用等号分隔并由“|”分隔。标记。它看起来像:阅读文本文件时出现空指针异常

abmodality=අපමාතිය 
abnegate=අයිතිවාසිකම අත්හරිනවා | ත්‍යජනය කරනවා | පිළිගැනීම අත්හරිනවා | මතය අත්හරිනවා 
abnormal=අනියම් | අපසාමාන්‍ය | අප්‍රමත | අවප්‍රමාණ | අස්වාභාවික | අසාමාන්‍ය | පුදුම 
abnormalism=අසාමාන්‍යභාවය 
abnormality=අනියම් බව | අප්‍රමතිය | අසාමාන්‍යත්වය | අසාමාන්‍යය | විපරීතය | විශේෂය 
abnormally=අනියම් ලෙසින් | අසාමාන්‍ය ලෙස | රියකට ගොඩ වී | විපරීතව 
aboard=දුම්රියේ | නැවේ | යාත්‍රාවකට ගොඩ වී | යාත්‍රාවේ | වාහනයක 

其实这是字典文件,它包含所有的英语单词,表述要z.I'm将创建MySQL数据库使用此文件,因为我不能插入所有文字和含义手动,因为它太大了。

所以我创建了Java程序,它以编程方式创建MySQL查询,所以我可以很容易地插入到我的1到许多数据库中有2个表。实际上,我的问题是程序给我一个错误,我发现哪一行文本文件给出这个错误而reading.important和令人困惑的事实是它不是一个独特的行,如果我运行我的程序5次读取不同的行时发生错误。

这是我的代码

   String[] parts ; 
       String en; 
       String[] sin; 

        try { 
      BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\Users\\Madhawa.se\\Desktop\\bac\\gui\\lktips-v3-lionlk.com\\a.txt"), "UTF-8")); 

      StringBuilder sb = new StringBuilder(); 
      String line = br.readLine(); 

      while (line != null) { 

       String s = br.readLine(); 

       parts = s.split("="); 
       en=parts[0]; 
       sin=parts[1].split(" | "); 

       sb.append("INSERT INTO `singlish`.`eng` (`eid`, `eword`) VALUES ('"+stpoint+"', '"+en+"');") 
       sb.append(System.lineSeparator()); 

       System.out.println(en); 

       for(int i=0;i<sin.length;i++){ 

       sb.append("INSERT INTO `singlish`.`sng` (`eid`, `sword`) VALUES ('"+stpoint+"', '"+sin[i]+"');"); 
       sb.append(System.lineSeparator()); 
       } 

       System.out.println(""+stpoint); 
       stpoint++; 
      } 
         System.out.println("finished"+subs.size()); 

         String everything = sb.toString(); 
         jTextArea1.append(everything); 


      br.close(); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 

然而,这是输出和错误,我得到的,但结果改变每次运行

attention 
3742 
attentive 
3743 
attentively 
3744 
java.lang.NullPointerException 
    at subtitleseeker.NewJFrame.jButton3ActionPerformed(NewJFrame.java:180) 
    at subtitleseeker.NewJFrame.access$200(NewJFrame.java:17) 
    at subtitleseeker.NewJFrame$3.actionPerformed(NewJFrame.java:60) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
attentiveness 
3745 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
attenuant 
+0

你有没有试过用调试器加强它? – Rob

+0

你能解释一下吗?我没有得到它 –

+0

检查NewJFrame.java在第180行非常接近。有些东西是你没有料到的那一行 – Gus

回答

3

在你原来的代码的时候,你从一条线读该文件并将其分配给您的line变量。您还要检查以确保while循环的条件中的行变量不为null。但是,您绝不会更新line变量的值,而只需在循环内读入s变量的新行,而不检查s是否为空。

这是你的原代码:

StringBuilder sb = new StringBuilder(); 
String line = br.readLine(); 

while (line != null) { 
    String s = br.readLine(); 

    parts = s.split("="); 
    en=parts[0]; 
    sin=parts[1].split(" | "); 

    sb.append("INSERT INTO `singlish`.`eng` (`eid`, `eword`) VALUES ('"+stpoint+"', '"+en+"');") 
    sb.append(System.lineSeparator()); 

    System.out.println(en); 

    for(int i=0;i<sin.length;i++) { 
     sb.append("INSERT INTO `singlish`.`sng` (`eid`, `sword`) VALUES ('"+stpoint+"', '"+sin[i]+"');"); 
     sb.append(System.lineSeparator()); 
    } 

    System.out.println(""+stpoint); 
    stpoint++; 
} 

这三行:

String line = br.readLine(); 

while (line != null) { 
    String s = br.readLine(); 

可与这一条线来代替:

for (String s; (s = br.readLine()) != null;) { 

所以,你的代码读取:

StringBuilder sb = new StringBuilder(); 

for (String s; (s = br.readLine()) != null;) { 

    parts = s.split("="); 
    en=parts[0]; 
    sin=parts[1].split(" | "); 

    sb.append("INSERT INTO `singlish`.`eng` (`eid`, `eword`) VALUES ('"+stpoint+"', '"+en+"');") 
    sb.append(System.lineSeparator()); 

    System.out.println(en); 

    for(int i=0;i<sin.length;i++) { 
     sb.append("INSERT INTO `singlish`.`sng` (`eid`, `sword`) VALUES ('"+stpoint+"', '"+sin[i]+"');"); 
     sb.append(System.lineSeparator()); 
    } 

    System.out.println(""+stpoint); 
    stpoint++; 
} 
+0

perfect.it现在工作。感谢您的时间 –