`

生成CSV文件的公共方法

阅读更多
   /**
     * 
     * 生成CSV文件:第一行是文件标题,第二行是字段名称,第三行开始是具体的业务数据 <br>
     * 〈功能详细描述〉
     * 
     * @param fileName:文件名
     * @param title:文件标题
     * @param cloumnNames:字段名数组
     * @param keys:字段Key数组
     * @param dataList:数据列表
     * @param response
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static void downLoadCsv(String fileName, String title, String[] cloumnNames, String[] keys,
            List<Map<String, Object>> dataList, HttpServletResponse response) {
        response.reset();
        PrintWriter out = null;
        try {
            response.setContentType("application/octet-stream;charset=GB2312");
            response.setHeader("Content-disposition", "attachment; filename="
                    + new String(fileName.getBytes("GBK"), "ISO-8859-1") + ".csv");
            out = response.getWriter();

            // 如果存在标题,则写入标题
            if (!StringUtil.isEmpty(title)) {
                out.write(title + "\r\n");
            }

            // 如果存在抬头字段,则写入抬头字段
            if (null != cloumnNames && cloumnNames.length > 0) {
                StringBuilder cloumns = new StringBuilder(100);
                for (String headStr : cloumnNames) {
                    cloumns.append(headStr).append(",");
                }
                cloumns.deleteCharAt(cloumns.length() - 1);
                cloumns.append("\r\n");
                out.write(cloumns.toString());
            }

            // 添加业务数据
            if (null != keys && keys.length > 0 && null != dataList && !dataList.isEmpty()) {
                // 遍历业务数据List
                for (Map<String, Object> dataMap : dataList) {
                    StringBuilder line = new StringBuilder(100);

                    // 遍历业务数据Map的value
                    for (String key : keys) {
                        // 处理字段值,使其符合CSV格式
                        String value = processCsvValue(MapUtils.getString(dataMap, key, ""));
                        // 将value值添加至输出字符序列
                        line.append(value).append(",");
                    }
                    line.deleteCharAt(line.length() - 1);
                    line.append("\r\n");

                    out.write(line.toString());
                }
            }
        } catch (IOException e) {
            logger.error("下载异常" + e.getMessage());
        } finally {
            IOUtils.closeQuietly(out);
        }
    }

    public static String processCsvValue(String s) {
        if (StringUtils.isBlank(s)) {
            return "";
        }
        String value = s.trim();
        // 包含有逗号、双引号、空格、换行符、回车符、空字符则将此字段用双引号引起来,
        if (value.indexOf('"') > -1 || value.indexOf(",") > -1 || value.indexOf("\n") > -1 || value.indexOf('\r') > -1) {
            StringBuffer csvValue = new StringBuffer();
            return csvValue.append('"').append(value).append('"').toString();
        } else {
            if (isAppendTabToStr(value)) {
                return value + "\t";
            }
            return value;
        }
    }

    /**
     * 
     * 是否在字符串的后面追加TAB符(对于超过16位的数字和以0开始的数字在用Excel打开时格式会发生错乱,因此在其末尾追加TAB) <br>
     * 〈功能详细描述〉
     * 
     * @param value
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    private static boolean isAppendTabToStr(String value) {
        if (value.matches("^[0-9\\.]{16,}$")) {
            return true;
        }

        if (value.matches("^[0-9\\.]{1,}$") && value.startsWith("0")) {
            return true;
        }

        return false;
    }
分享到:
评论

相关推荐

    Python-csvsql用SQL查询你的CSV文件

    假设你有两个CSV文件`file1.csv`和`file2.csv`,且它们有公共的列`common_column`,你可以进行连接操作: ```bash csvsql -i sqlite --join common_column file1.csv file2.csv "SELECT * FROM file1 JOIN file2 ON...

    dbc2csv:dbc 到 csv 转换器

    dbc2csv的主要思想是通过以易于处理的格式(例如csv生成数据来促进与公共卫生数据相关的搜索。 注意: 有问题的dbc文件是 SUS 信息学部 (DATASUS) 的专有格式,与 Microsoft FoxPro 或同名 CANdb 格式无关。 如何...

    基于Python+Requests+Pytest的接口自动化项目源码.zip

    session自动关联支持多session之间切换多变量环境,可设置变量,全局变量及环境变量支持多套配置文件之间切换Yaml文件可关联Csv文件,Yaml文件存放公共测试数据,Csv文件存放测试数据yaml及Csv文件中均可使用变量、...

    PartialCsvParser:解析 CSV 文件的特定部分。 用于并行 CSV 解析

    使用生成的目录安装PartialCsvParser 是一个在公共领域分发的单头库。 只需将PartialCsvParser.hpp复制到包含路径中并包含它。 您还git add将头文件git add到您的存储库中,甚至可以对其进行修改。 如果您做出一些...

    java 根据javaBean反射自定义导出 excel、xml、pdf、csv

    JavaBean是符合一定规范的Java类,主要特点是:公开的构造函数、公共属性和getter/setter方法。它们通常用于封装业务逻辑中的数据模型,使得数据能够以面向对象的方式被操作和传递。 接着,我们来看看如何利用反射...

    CVS to Entity Framework

    这些类通常包含公共属性,属性名与CSV文件的列名对应。这样做的好处是提高了代码的可维护性和可读性。 3. **附加属性**:为了增强实体类的功能,可以添加一些附加属性,例如`[NotMapped]`用于指示该属性不应在...

    处理经过主动毫米波目标检测输出的csv文件.zip

    对每个不同窗口大小的滑窗都进行检测后,会得到不同窗口检测到的物体标记,这些窗口大小会存在重复较高的部分,最后采用非极大值抑制(Non-Maximum Suppression, NMS)的方法进行筛选。最终,经过NMS筛选后获得检测到...

    eplan西门子宏

    在安装和使用西门子宏时,你需要将压缩包中的文件解压到指定的位置,即"C:\用户\公共\eplan\data"目录下。这个路径是EPLAN默认的数据存储位置,宏文件放在这里可以被EPLAN软件识别和调用。请确保在操作前关闭EPLAN...

    快速,简单,优雅的方式将C#数据模型转换为CSV

    在生成CSV的过程中,开发者通常会首先定义一个C#类,该类代表数据模型,然后利用反射遍历类的所有属性,将它们的值转化为适合CSV格式的字符串。这个过程可能涉及到数据类型的转换,例如日期、数字或枚举值,确保它们...

    goEuroTest:实现 API 查询并将此数据转换为 csv 文件

    CSV文件格式是一种常见的数据存储方式,尤其适用于需要进行数据分析或导入其他应用程序的情况。以下是这个项目涉及的一些关键知识点: 1. **API(Application Programming Interface)调用**: API允许不同应用...

    GarminDB:从Garmin Connect或Garmin watch,FitBit CSV和MS Health CSV文件下载并解析数据到Sqlite无服务器数据库中并分析数据

    Garmin数据库 脚本,用于将运行状况数据解析为 DB并在其中处理数据。... 将数据保留为JSON文件或FIT文件,这样就可以重新生成数据库,而无需从Garmin Connect连接或重新下载数据。 将活动导出为TCX文件。 将数据

    cvs c++ 解析类

    本篇文章将深入探讨如何在C++中设计一个跨平台的CSV文件解析类,以满足在Linux和Windows上对CSV文件的操作需求。 首先,我们需要理解CSV文件的基本结构。CSV文件由一系列记录组成,每个记录由一个或多个字段构成,...

    aspnet公共类cs文件.rar

    用于获取或设置Web.config/*.exe.config中节点数据的辅助类(AppConfig.cs)CSV文件和DataTable对象转换辅助类(CSVHelper.cs)DatabaseInfo 的摘要说明。(DatabaseInfo.cs)常用的目录操作辅助类(DirectoryUtil.cs) ...

    基于Java的中国卫生信息网络直报系统文件生成程序.zip

    文件生成是直报系统中的重要环节,可能涉及到PDF、Excel或CSV等多种格式。Java的Apache POI库用于处理Microsoft Office文档,如生成Excel报表;iText或PDFBox库则可用来创建PDF文件,这两种格式都适合打印和长期保存...

    点阵字体生成器

    这些数据通常是以二进制或文本格式保存,例如C语言数组、CSV文件或其他定制格式,以便在目标系统中直接加载和使用。生成的字库文件包含了所有预定义字符(ASCII码或者更广泛的Unicode字符集)的点阵数据。 在描述中...

    Apache Commons 公共jar包

    8. **Commons CSV**: 用于处理CSV(逗号分隔值)文件,提供解析和生成CSV格式的功能。 9. **Commons HttpClient**:(已废弃,推荐使用Apache HTTP Components)提供HTTP客户端接口,支持HTTP/1.1协议,包括连接管理...

    泰安区县级别行政区划shp文件

    此外,这些数据可能还包括其他相关信息,如区县的人口、面积、经济指标等,这些属性可以通过与shp文件关联的DBF(数据库文件)或者CSV等格式的数据文件获取。通过GIS软件,用户可以对这些数据进行叠加分析,以揭示...

    csvToHtml:CSV 到 HTML 转换器中的表格

    复制一个 csv 文件 点击,生成表格 复制你的新表 例子 布宜诺斯艾利斯市的自行车商店。 ATX 的说客。 乌拉圭的公共组织。 去做 样式 带有信息和许可证的页脚 分析 联系表 配置 CSV(制表符、逗号等) data-title...

    csv2rdf4lod:使用 RDFS 范式将表转换为 RDF

    在使用CSV2RDF4LOD时,用户需要提供CSV文件,并定义相应的RDFS模式。工具会根据这个模式解析CSV数据,并生成对应的RDF三元组。生成的RDF数据可以直接发布到Linked Open Data(LOD)云中,与其他开放数据集链接,形成...

    Excel文件导出封装包

    8. **API接口**:封装包通常通过一组公共方法和属性提供服务,例如`ExportToExcel(DataTable data, string outputPath)`,使调用者能够简单直观地使用。 9. **并发和跨平台兼容性**:考虑到现代开发环境的多样性,...

Global site tag (gtag.js) - Google Analytics