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(); 


为什么这样只能导出少量数据,大量数据就不行呢? 
要怎么样修改这个程序呢? 
请大家帮我看看,谢谢大家了

解决方案 »

  1.   

    response.setContentType("application/octet-stream");
     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万的数据
      

  2.   

    response.write   不适合做大文件的传输,访问量少还行,如果有几个人的话,有可能iis就瘫痪了
    不要用   response.write   输出文件,除非这个文件10K都不到。
      

  3.   

    等待二十秒后抛出错误
    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)

      

  4.   

    输出流,查查javadoc就知道了fileWriter
      

  5.   

    java.io.File f  =   new  java.io.File(filePath);
    response.setContentLength(( int ) f.length()); //  设置下载内容大小 
    BufferedOutputStream output  =   new  BufferedOutputStream(response.getOutputStream());
    byte [] buffer  =   new   byte [ 4096 ]; //  缓冲区 
    output.write(buffer,  0 , n);
    response.flushBuffer();
      

  6.   

    没怎么弄清楚什么意思。public String exPortTxt() {
    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;
    }为什么弹出下载框后,会停的报空指针异常的错误?我安装了迅雷,迅雷和本地下载一起出来了?