java导出txt文件的问题?

来源:百度知道 编辑:UC知道 时间:2024/07/07 11:14:47
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition","attachment; filename=1.txt");
for(Object obj:list){
CcCompareCrbt c=(CcCompareCrbt) obj;
try {
response.getWriter().print(c.getCompare_type()+"\r");

response.getWriter().print(c.getUser_Type()+"\r");
response.getWriter().print(c.getOds_Content()+"\r");
response.getWriter().print(c.getHlr_Content()+"\r");
response.getWriter().print(c.getCrbt_Content()+"\r");
response.getWriter().print(c.getIbp_Content()+"\r");
response.getWriter().print(c.getHlr_Id()+"\r");
response.getWriter().print(c.getIbp_User_Id()+"\r");
response.getWriter().print(c.getCompare_Date()+"\r\n");
} catch (IOException

我觉的你的问题在于在循环中一直调用response.getWriter().print();这句,计算机运行中response.getWriter()会不停的生成一个PrintWriter类的对象,导致堆空间在短时间内生成大量的对象,在垃圾回收器未来的及回收之前就内存溢出了。
建议修改:在循环外使用PrintWriter pw=response.getWriter();
循环内使用pw.print();方法。再试试看

如果你的list里放了太多的数据,这样自身就会内存溢出。list中的对象如果没内存溢出,再使用上面说的方法试,不要再用StringBuffer存list中的数据,StringBuffer存list内数据时也是占用内存的,这样你内存消耗的更快。

list最好分成多次存储对象。

大量数据会导致OutOfMemoryError
一是可以调整java内存大小解决
二是采用小批多次导入的设计解决

大数据得设置一个缓冲区,bufferwriter什么的,缓冲满了记得flush,否则异常..

不是很清楚