2014-07-24 106 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現在工作。感謝您的時間 –