csv文件就是一个普通的文本文件,只不过是用逗号来分隔字段,所以生成文件部分利用File类和几个Stream就可以了,网上这部分代码很多

解决方案 »

  1.   

    easy
    就给个代码吧
    能找到还用上这里问吗
    楼上净说没用的
      

  2.   

    out.println("a,b,c");
    out.println("d,e,f");
    ...
      

  3.   

    你的CSV文件准备存到服务器端还是客户端呀?
      

  4.   

    一帮小屁孩,连 CSV 文件格式 的规范都没有读过就瞎说CSV格式远比你们想象的要复杂!
      

  5.   

    你可以参考下面的代码。doCreateFile方法是将后台查询得到的数据写到CSV文件中。不过需要设置IE中的安全设置,将其中的ActiveX控件设为可用。<script language="javascript">function ReadWriteFile(strFileFolder,strFile)
    {//判断并创建文件夹
    var fso
    var RetVal
    fso = new ActiveXObject("Scripting.FileSystemObject");
    var strTmp = ""
    strTmp = strFileFolder.substring(0,4);
    for (i=4;i<strFileFolder.length;i++) {
    if (strFileFolder.charAt(i) == "\\") {
    if(fso.FolderExists(strTmp)==false)
    {//文件夹不存在创建文件夹
    fso.CreateFolder(strTmp)
    }
    strTmp = strTmp + '\\\\'
    } else {
    strTmp = strTmp + strFileFolder.charAt(i)
    }
    }
    strFileFolder = strTmp if(fso.FolderExists(strFileFolder)==false)
    {//文件夹不存在创建文件夹
    fso.CreateFolder(strFileFolder)

    }
    if(fso.FileExists(strFile)==false)
    {//文件不存在创建文件
    //fso.CreateTextFile(strFile)
    //alert("")
    //var tf = fso.OpenTextFile(strFile,2,true,0)
    //tf.WriteLine("00000000")
    }
    return true
    }
    function RepSC(str,str1,str2) {
    var strTmp = "";
    var startPosition = 0;

    for (var i=0;i<str.length;i++) {
    if (str.charAt(i) == str1) {
    strTmp = strTmp + str2;
    } else {
    strTmp = strTmp + str.charAt(i);
    }
    }
    return strTmp;
    }function doCreateFile(){
    //获得文件夹
    var fileFolder = document.forms[0].fileName.value;
    if(null == fileFolder || trim(fileFolder)==""){
    alert('<bean:message key="asrDownCheckAll.alert.str1"/>');
    return;
    }

    //--98不支持 \\做为目录结构
    //fileFolder = RepSC(fileFolder,"\\","\\\\");
    fileFolder = RepSC(fileFolder,"/","\\");
    //end
    <%
    HashMap hm = (HashMap)request.getAttribute("CHECK_INFO");
    Vector depot_id = (Vector)request.getAttribute("DEPOTID");
    if(null != depot_id && !depot_id.isEmpty() && null != hm && !hm.isEmpty()){
    String date = (String)hm.get("DATE");


    %>

    <%
    for(int i=0;i<depot_id.size();i++)
    {
      Vector vt = (Vector)hm.get((String)depot_id.get(i));
      String str = "";
      
    %>

      var fileName = '<%=(String)depot_id.get(i)%>' + '<%=date%>' + ".csv";   ReadWriteFile(fileFolder,fileName);

       var fso = new ActiveXObject("Scripting.FileSystemObject");
      var zzz = fileFolder + '\\' +fileName;
      
      var tf = fso.OpenTextFile(zzz,2,true,0);
      
      var astr = null;
    <%

      for(int j=0;j<vt.size();j++)
      {
       
        str = (String)vt.get(j); %>
    astr = '<%=str%>';

    tf.WriteLine(astr);
    <%   }
    %>
    tf.close();

    <%   
     }
    }
    %>

    alert('<bean:message key="asrDownCheckAll.alert.str2"/>');
    return;}
    //去掉空格"开始"
    function ltrim(s)
    {
    var len = s.length;
    if (len < 1)
    return "";
    var i = 0;
    while ( i < len && __isBlankChar(s.charAt(i++)) )
    ; //什么也不做
    return s.substring(--i, len);
    }function rtrim(s)
    {
    var len = s.length;
    if (len < 1)
    return "";
    var i = len;
    while ( i > -1 && __isBlankChar(s.charAt(--i)) )
    ; //什么也不做
    return s.substring(0, ++i);}function trim(s)
    {
    var s1 = ltrim(s);
    return (rtrim(s1));
    }function __isBlankChar(ch)
    {
    //去掉了'\v';20020522   chenmq
    return (ch == ' ' || ch == '\f' || ch == '\n' || ch == '\r' || ch=='\t');
    }
    //去掉空格"结束"</script>
      

  6.   

    这个问题可以分两部分讨论:1、csv文件的格式
    2、通过jsp向客户端输出csv文件第一个问题我们就按简单的来讨论,可以认为是每个字段用""包含后再用,号分割
    比如:
    "a","b","c"
    "d","e","f"
    现在我们有了csv文件的内容,我们看看怎么把它输出到客户端一种变通的方法是把csv的内容写到一个临时文件中,然后让客户端下载这个临时文件。不过最简单的方法是直接向客户端输出:以下是csv.jsp的内容
    "a","b","c"
    "d","e","f"就这么简单,这些信息就输出到客户端了。不过现在的情况估计是不会满足楼主需要的,因为浏览器自己处理了这些信息,而不是交给excel来处理。
    为了让浏览器把处理权让处理,我们需要在jsp的头部加上一些信息,告诉浏览器这些信息不用你来操心,交给其他合适的程序(对应csv来说当然是excel咯)来处理就好了。
    先告诉它“以下信息是m$的,不是html的”:
    <%@ page language="java" contentType="application/ms-excel"%>
    再告诉它文件名是test.csv
    <%response.setHeader("Content-Disposition","filename=test.xls");%>
    最后是文件的内容:
    "a","b","c"
    "d","e","f"全文就是这个样子
    <%@ page language="java" contentType="application/ms-excel"%>
    <%response.setHeader("Content-Disposition","filename=test.xls");%>
    "a","b","c"
    "d","e","f"楼主把abcd什么的换成你从javaBean中查到的东西就可以了。再访问这个网页,ie的话会提示你打开或者保存,应该是楼主想要的结果了吧。