我是一個Java新手,似乎無法弄清楚爲什麼這個原始的20分鐘的應用程序正在拋出該異常。爲什麼我一直使用這段代碼得到一個ArrayIndexOutOfBoundsException?
基本上我解析了一個192MB(是,192MB)製表符分隔的文本文件並將內容存儲到MongoDB中。
package get_alternatenames;
import java.io.BufferedReader;
import java.io.FileReader;
import com.mongodb.Mongo;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.DBCursor;
import java.util.Set;
/**
*
* @author cbmeeks
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws Exception {
String alternateNamesFileName = "/Users/cbmeeks/Projects/GetData/geonames/alternateNames.txt";
String line;
// MongoDB
Mongo m = new Mongo("localhost", 27017);
DB db = m.getDB("mydb");
// Build AlternateNames
DBCollection altNames = db.getCollection("alternatenames");
BufferedReader bReader = new BufferedReader(new FileReader(alternateNamesFileName));
int isPreferredName = 0;
int isShortName = 0;
int lines = 0;
System.out.println("Starting AlternateNames import...");
while ((line = bReader.readLine()) != null) {
String l[] = line.split("\t");
BasicDBObject altName = new BasicDBObject();
altName.put("alternateNameId", l[0]);
altName.put("geonameId", l[1]);
altName.put("isoLanguage", l[2]);
altName.put("alternateName", l[3]);
isPreferredName = 0;
isShortName = 0;
try {
if (l[4] != null) {
isPreferredName = Integer.parseInt(l[4]);
}
} catch (ArrayIndexOutOfBoundsException ex) {
isPreferredName = 0;
} catch (Exception ex) {
isPreferredName = 0;
}
try {
if (l[5] != null) {
isShortName = Integer.parseInt(l[5]);
}
} catch (ArrayIndexOutOfBoundsException ex) {
isShortName = 0;
} catch (Exception ex) {
isShortName = 0;
}
altName.put("isPreferredName", isPreferredName);
altName.put("isShortName", isShortName);
altNames.insert(altName);
lines++;
}
bReader.close();
System.out.println("Number of lines parsed: " + lines);
System.out.println("Creating indexes...");
altNames.createIndex(new BasicDBObject("geonameId", 1));
altNames.createIndex(new BasicDBObject("isoLanguage", 1));
altNames.createIndex(new BasicDBObject("alternateName", 1));
}
}
我知道這不是世界上最美的代碼。實際上它似乎一直工作到最後。它成功進口540萬條記錄,然後結束:
Starting AlternateNames import...
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
Java Result: 1
BUILD SUCCESSFUL (total time: 2 minutes 58 seconds)
我似乎無法找到問題所在。我試圖搜索文本文件來發現一個問題,但在192MB,似乎沒有任何東西能夠處理它,除了MacVIM,我無法完全理解該程序。大聲笑
但我相信它沒有完成文件。當我轉到文本文件中導入的最後一條記錄時(基於MongoDB中的記錄計數),看起來看起來很好...但我可能錯過了一些東西。
有什麼建議嗎?
謝謝。
BTW,榮譽給Java進行解析在3分鐘內該文本文件...
您應該知道哪一行拋出異常,您可以通過查看行號然後檢查代碼來了解它。 – Jack 2011-04-02 03:54:42