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 e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
为什么这样只能导出少量数据,大量数据就不行呢?
要怎么样修改这个程序呢?
请大家帮我看看,谢谢大家了
response.addHeader("Content-Disposition","attachment; filename=1.txt");
StringBuffer sb=new StringBuffer();
for(Object obj:list){
CcCompareCrbt c=(CcCompareCrbt) obj;
sb.append(c.getCompare_type()+"\t");
sb.append(c.getGtn_Telephone()+"\t");
sb.append(c.getUser_Type()+"\t");
sb.append(c.getOds_Content()+"\t");
sb.append(c.getHlr_Content()+"\t");
sb.append(c.getCrbt_Content()+"\t");
sb.append(c.getIbp_Content()+"\t");
sb.append(c.getHlr_Id()+"\t");
sb.append(c.getIbp_User_Id()+"\t");
sb.append(c.getCompare_Date()+"\r\n");
}
try {
response.setContentType("text/html;charset=utf-8");
response.getWriter().print(sb.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我改用 StringBuffer了,一样读不出大数据量 我表用有 16万的数据
不要用 response.write 输出文件,除非这个文件10K都不到。
java.lang.reflect.InvocationTargetException
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221)
response.setContentLength(( int ) f.length()); // 设置下载内容大小
BufferedOutputStream output = new BufferedOutputStream(response.getOutputStream());
byte [] buffer = new byte [ 4096 ]; // 缓冲区
output.write(buffer, 0 , n);
response.flushBuffer();
if (form == null){
form = ServletActionContext.getRequest().getSession().getAttribute("form").toString();
System.out.println("TXT中form是"+form);
}
String sql = "";
if (form.equals("0")) {
sql = "select * from (select A.*, rownum RN from (select * from cc_compare_crbt) A )where RN > ? and RN<= ?";
} else if (form.equals("1")) {
sql = ServletActionContext.getRequest().getSession().getAttribute("sql").toString();
} HttpServletResponse response = ServletActionContext.getResponse();
Map map = null;
List list = null;
try {
if(selectFile.trim().length()==0){
selectFile="1";
}
map = comparecrbtservice.exPortQuery(Integer.parseInt(selectFile), sql);
list = (List) map.get("list");
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition","attachment; filename=1.txt");
StringBuffer sb=new StringBuffer();
sb.append("比较名称\t");
sb.append("CDMA号码\t");
sb.append("用户类型\t");
sb.append("ODS情况\t");
sb.append("HLR情况\t");
sb.append("CRBT情况\t");
sb.append("IBP情况\t");
sb.append("HLRID\t");
sb.append("IBPUserid\t");
sb.append("比较时间\r\n");
for(Object obj:list){
CcCompareCrbt c=(CcCompareCrbt) obj;
sb.append(c.getCompare_type()+"\t");
sb.append(c.getGtn_Telephone()+"\t");
sb.append(c.getUser_Type()+"\t");
sb.append(c.getOds_Content()+"\t");
sb.append(c.getHlr_Content()+"\t");
sb.append(c.getCrbt_Content()+"\t");
sb.append(c.getIbp_Content()+"\t");
sb.append(c.getHlr_Id()+"\t");
sb.append(c.getIbp_User_Id()+"\t");
sb.append(c.getCompare_Date()+"\r\n");
}
try {
response.setContentType("text/html;charset=utf-8");
response.getWriter().print(sb.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}为什么弹出下载框后,会停的报空指针异常的错误?我安装了迅雷,迅雷和本地下载一起出来了?