我是用java的jxl从Excel中读出数据按列读每列5行求一次平均值,有两个问题请教大家:
问题一:程序编译以没有问题,但是数据量大些时报内存溢出错误码:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space   
问题二:我输出到文本文件中的数据是按行存放的,如何可以与Excel表相对应按列存
现将我的代码整个贴出,请高手指点
代码:
import jxl.*;
import java.io.*;
import java.lang.*;
import jxl.write.*;class Excel2Text
{
public static void main(String[] args) 
{
    jxl.Workbook rwb = null;
    FileOutputStream outFile=null;
    try{
      InputStream is = new FileInputStream("D:/jb9Test/Book1.xls");
      outFile=new FileOutputStream("D:/jb9Test/test.txt");
  StringBuffer str1=new StringBuffer("");
      String aa="";
      double sum=0;
  
      rwb = Workbook.getWorkbook(is);
      Sheet rs = rwb.getSheet(0);
       //获取Sheet表中所包含的总列数
       int rsColumns = rs.getColumns();
       //获取Sheet表中所包含的总行数
       int rsRows = rs.getRows();       for(int i=0;i<rsColumns;i++){ //读列
         for(int j=0;j<rsRows;j++){  //读行
           Cell cell = rs.getCell(i,j);           sum +=Double.parseDouble(cell.getContents());
  // sum += Float.parseFloat(cell.getContents());浮点型    if((j+1)%5==0){
           aa=String.valueOf(sum/5)+" ";
           outFile.write(aa.getBytes());           sum=0;
           } 
           
         }
 outFile.write("\n".getBytes());
       } }catch(Exception e){
      e.printStackTrace(); }finally{
      //操作完成时,关闭对象,释放占用的内存空间
      rwb.close();
    }  }
}

解决方案 »

  1.   

    可以使用flush()来清理缓存,比如500列就清理缓存一次:if(rsColumns%500==0){outFile.flush();}
      

  2.   

    非常感谢您,可是我试了,还是报同样的错,加上if(rsColumns%500==0){outFile.flush();} 感觉好象没有清理.
      

  3.   

    D:/jb9Test/Book1.xls有几万条数据吗?增加内存吧 xms xmx
    eg:-Xms512M -Xmx1200M 
      

  4.   

    java虚拟机的内存调大
    -Xms512M -Xmx1200M 
      

  5.   

    D:/jb9Test/Book1.xls有5万多条数据,我的内存也要2G呢,jvm的设罢我是在windows的系统环境变量下设置的,不知道对不对,总之设完了,还是同样的错误.
      

  6.   

    从网上看了,很多设置jvm的都有是在调整tomcat ,可是我暂时没用tomcat,哪从哪里调节器整java虚拟机的内存?
      

  7.   

    你在调整也没有用jExcel和POI都是一个单元格一个单元格获取的。就是书哦··除非你的操作结束要不然它会一直吃你内存,吃到内存爆。导出也是一样的道理,导出太多肯定爆。你导出的是TXT可以这样,导出一部分数据之后关闭流之后在原有基础上追加··可以试试
      

  8.   

    参考 http://cnluntan.net/blog/JAVA向EXCEL写入海量数据