zoukankan      html  css  js  c++  java
  • java 生成 csv文件

     一、csv文件

      逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。
    CSV是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的(往往是私有的和/或无规范的格式)。因为大量程序都支持某种CSV变体,至少是作为一种可选择的输入/输出格式。

    “CSV”泛指具有以下特征的任何文件:

    • 纯文本,使用某个字符集,比如ASCII、Unicode、EBCDIC或GB2312;
    • 由记录组成(典型的是每行一条记录);
    • 每条记录被分隔符分隔为字段(典型分隔符有逗号、分号或制表符;有时分隔符可以包括可选的空格);
    • 每条记录都有同样的字段序列。

    二、示例

      相关代码如下:

      1 package com.test.excel;
      2 
      3 import java.io.BufferedWriter;
      4 import java.io.File;
      5 import java.io.FileOutputStream;
      6 import java.io.IOException;
      7 import java.io.OutputStreamWriter;
      8 import java.net.URLEncoder;
      9 import java.util.ArrayList;
     10 import java.util.Arrays;
     11 import java.util.Date;
     12 import java.util.List;
     13 
     14 import org.junit.Test;
     15 
     16 /**
     17  * 创建CSV文件
     18  */
     19 public class CSVCrate {
     20 
     21     /**
     22      * 创建CSV文件
     23      */
     24     @Test
     25     public void createCSV() {
     26         
     27         // 表格头
     28         Object[] head = { "客户姓名", "证件类型", "日期", };
     29         List<Object> headList = Arrays.asList(head);
     30 
     31         //数据
     32         List<List<Object>> dataList = new ArrayList<List<Object>>();
     33         List<Object> rowList = null;
     34         for (int i = 0; i < 100; i++) {
     35             rowList = new ArrayList<Object>();
     36             rowList.add("张三" + i);
     37             rowList.add("263834194" + i);
     38             rowList.add(new Date());
     39             dataList.add(rowList);
     40         }
     41         
     42         String fileName = "testCSV.csv";//文件名称
     43         String filePath = "c:/test/"; //文件路径
     44         
     45         File csvFile = null;
     46         BufferedWriter csvWtriter = null;
     47         try {
     48             csvFile = new File(filePath + fileName);
     49             File parent = csvFile.getParentFile();
     50             if (parent != null && !parent.exists()) {
     51                 parent.mkdirs();
     52             }
     53             csvFile.createNewFile();
     54 
     55             // GB2312使正确读取分隔符","
     56             csvWtriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile), "GB2312"), 1024);
     57             
     58             //文件下载,使用如下代码
     59 //            response.setContentType("application/csv;charset=gb18030");
     60 //            response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
     61 //            ServletOutputStream out = response.getOutputStream();
     62 //            csvWtriter = new BufferedWriter(new OutputStreamWriter(out, "GB2312"), 1024);
     63             
     64             int num = headList.size() / 2;
     65             StringBuffer buffer = new StringBuffer();
     66             for (int i = 0; i < num; i++) {
     67                 buffer.append(" ,");
     68             }
     69             csvWtriter.write(buffer.toString() + fileName + buffer.toString());
     70             csvWtriter.newLine();
     71 
     72             // 写入文件头部
     73             writeRow(headList, csvWtriter);
     74 
     75             // 写入文件内容
     76             for (List<Object> row : dataList) {
     77                 writeRow(row, csvWtriter);
     78             }
     79             csvWtriter.flush();
     80         } catch (Exception e) {
     81             e.printStackTrace();
     82         } finally {
     83             try {
     84                 csvWtriter.close();
     85             } catch (IOException e) {
     86                 e.printStackTrace();
     87             }
     88         }
     89     }
     90     
     91     /**
     92      * 写一行数据
     93      * @param row 数据列表
     94      * @param csvWriter
     95      * @throws IOException
     96      */
     97     private static void writeRow(List<Object> row, BufferedWriter csvWriter) throws IOException {
     98         for (Object data : row) {
     99             StringBuffer sb = new StringBuffer();
    100             String rowStr = sb.append(""").append(data).append("",").toString();
    101             csvWriter.write(rowStr);
    102         }
    103         csvWriter.newLine();
    104     }
    105 }
  • 相关阅读:
    【转】使用scipy进行层次聚类和k-means聚类
    spark wordcont Spark: sortBy和sortByKey函数详解
    scala akka通信机制
    redis AOF 和RDB
    java虚拟机学习
    快速排序,一个爱情故事-java版
    Caused by: java.io.IOException: Added a key not lexically larger than previous.
    java.io.IOException: No FileSystem for scheme: hdfs
    " java.lang.NoSuchFieldError: HBASE_CLIENT_PREFETCH_LIMIT
    用户活跃度分析
  • 原文地址:https://www.cnblogs.com/always-online/p/4801015.html
Copyright © 2011-2022 走看看