import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
public class CNtest {
static ArrayList countrys = new ArrayList();
static ArrayList names_zh = new ArrayList();
static ArrayList names = new ArrayList();
static ArrayList names_en = new ArrayList();
static ArrayList kinds = new ArrayList();
static ArrayList oricodes = new ArrayList();
public static void readExcel() {
Workbook book = null;
try {
book = Workbook.getWorkbook(new File("CN-56803.xls"));
Sheet sheet = book.getSheet(0);
for (int i = 0; i < sheet.getRows(); i++) {
System.out.println("开始读取第"+i+"行数据");
Cell gbCell = sheet.getCell(0, i);
Cell zwmcCell = sheet.getCell(1, i);
Cell ywmcCell = sheet.getCell(2, i);
Cell jglxCell = sheet.getCell(3, i);
Cell ysdmCell = sheet.getCell(4, i);
String gb = gbCell.getContents().trim();
String zwmc = zwmcCell.getContents().trim();
String ywmc = ywmcCell.getContents().trim();
String jglx = jglxCell.getContents().trim();
String ysdm = ysdmCell.getContents().trim();

HashMap name = new HashMap();
name.put(ywmc,"EN" );
name.put(zwmc,"ZH" );

countrys.add(gb);
//names.add(name);//*请问如何解决呢?
names_zh.add(zwmc);
names_en.add(ywmc);
kinds.add(jglx);
oricodes.add(ysdm);
}
}
catch(Exception e){

}
finally{
book.close();
}
}
public static void main(String[] args){
readExcel();

}}运行结果:
开始读取第39221行数据
开始读取第39222行数据
开始读取第39223行数据
开始读取第39224行数据
java.lang.OutOfMemoryError
Exception in thread "main" 
跟39224行没有关系,如果把CN-56803.xls中的39224行附近的几行去掉依然存在。

解决方案 »

  1.   

    Exception in thread "main" 
    把这下面的错误信息也发上来
      

  2.   

    内存益出好象和   //names.add(name);//*请问如何解决呢?
    这句话没关系吧  这么多全局变量 都要存放60000多个对象 肯定会溢出的吧
      

  3.   

    如果你的HashMap
     HashMap name = new HashMap(); 
    每次都是用来存储中文和英文两个元素的话,你可以声明成:
     HashMap name = new HashMap(2); //默认的是16
    这样会节省一些空间。看会不会读的行数多一些
      

  4.   

    我把这个程序通过DOS控制台来运行,加上-Xmx512M后可以正常运行。看来的确是5楼的老师说的,现在问题解决了,但是我想请问一下各位老师,我的程序一般都多是在eclipse中开发的,难道我每次都要把程序通过DOS来运行吗?能不能在eclipse中直接设置虚拟机预设内存?另外,再请教一下各位老师,如果以后遇到类似的文本处理问题,常常需要涉及到几十万的数据量,我要怎么处理呢,比如,开始我也想过分段处理,但是我常常要拿每一条数据去跟其它每一条数据进行比对,如果不断的释放掉,那我后面出现的数据如何去跟已经释放掉的数据比对呢?过几天我就要做另外一个150万条数据的处理了,请各位老师教教我!
      

  5.   

    在Eclipse里选:Window->Preference->Installed JREs->Edit(选中jre),在Default VM Arguments里输入-Xms256m -Xmx1024m,表示最小内存256M,最大1G,然后运行就可以了。后面那个数据处理的偶不懂..