加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何使用servlet创建csv文件?

发布时间:2020-12-15 05:04:49 所属栏目:Java 来源:网络整理
导读:我想从servlet下载csv文件.Data来自Object [] obj = search.getSearch(); 我有数据对象[],我需要写入csv并下载. 你能帮帮我怎么做servlet课吗? 解决方法 Object []如何表示CSV数据?它是包含一行有多列还是多行有一列?我想象Object [] []或List List Objec
我想从servlet下载csv文件.Data来自Object [] obj = search.getSearch();

我有数据对象[],我需要写入csv并下载.

你能帮帮我怎么做servlet课吗?

解决方法

Object []如何表示CSV数据?它是包含一行有多列还是多行有一列?我想象Object [] []或List< List< Object>>更有意义.

无论如何,在创建CSV文件时你必须遵守RFC4180 spec.它基本上很简单,只有3条严格的规则:

>字段用逗号分隔.
>如果字段中出现逗号,则该字段必须用双引号括起来.
>如果字段中出现双引号,则该字段必须用双引号括起来,并且字段中的双引号必须通过另一个双引号进行转义.

这是一个启动示例,它基于List< List< T>>执行此操作.作为源和OutputStream作为目标.

public static <T> void writeCsv (List<List<T>> csv,char separator,OutputStream output) throws IOException {
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output,"UTF-8"));
    for (List<T> row : csv) {
        for (Iterator<T> iter = row.iterator(); iter.hasNext();) {
            String field = String.valueOf(iter.next()).replace(""","""");
            if (field.indexOf(separator) > -1 || field.indexOf('"') > -1) {
                field = '"' + field + '"';
            }
            writer.append(field);
            if (iter.hasNext()) {
                writer.append(separator);
            }
        }
        writer.newLine();
    }
    writer.flush();
}

以下是如何在Servlet中使用它:

protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
    List<List<Object>> csv = getItSomehow();
    response.setHeader("Content-Type","text/csv");
    response.setHeader("Content-Disposition","attachment;filename="file.csv"");
    writeCsv(csv,';',response.getOutputStream());
}

(请注意,基于欧洲的语言环境对CSV文件使用分号而不是逗号,请随时更改)

内容 – 附件处理将强制另存为对话框.请注意,MSIE有一个错误行为,它不会将文件名作为默认文件名保存为另存为对话框,但它取代了pathinfo的最后一部分.因此,如果此servlet例如由http://example.com/csv调用,那么您将获得csv作为默认文件名.而是将其附加到pathinfo,如下面的http://example.com/csv/file.csv.只应将servlet映射到/ csv / *而不是/ csv的url模式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读