集册 Java实例教程 CSV内容格式化程序。

CSV内容格式化程序。

欢马劈雪     最近更新时间:2020-01-02 10:19:05

755
CSV内容格式化程序。
/*
N o w  J a v a  . c o m
*/


//package com.nowjava;

import java.io.*;


import java.util.Iterator;

import java.util.List;


public class Main {

    private static final char DEFAULT_CSV_SEPARATOR = ';';

    private static final String DEFAULT_LINE_SEPARATOR = "\r\n";


    /**

     * CSV content formatter. Convert a two-dimensional List of Objects to a CSV in an InputStream.

     * The value of each Object will be obtained by its toString() method. The fields of each CSV

     * record will be separated by the default CSV field separator, a comma.

     *

     * @param csvList A two-dimensional List of Objects representing the rows and columns of the

     *                CSV.

     * @return The InputStream containing the CSV contents (actually a ByteArrayInputStream).

     */

    public static <T extends Object> InputStream formatCsv(

            List<List<T>> csvList) {

        return formatCsv(csvList, DEFAULT_CSV_SEPARATOR);

    }


    /**

     * CSV content formatter. Convert a two-dimensional List of Objects to a CSV in an InputStream.

     * The value of each Object will be obtained by its toString() method. The fields of each CSV

     * record will be separated by the specified CSV field separator.

     *

     * @param csvList      A two-dimensional List of Objects representing the rows and columns of the

     *                     CSV.

     * @param csvSeparator The CSV field separator to be used.

     * @return The InputStream containing the CSV contents (actually a ByteArrayInputStream).

     */

    public static <T extends Object> InputStream formatCsv(// 来自 n o w  j a v a  . c o m

            List<List<T>> csvList, char csvSeparator) {


        // Prepare.

        StringBuilder csvContent = new StringBuilder();


        // Process records.

        for (List<T> csvRecord : csvList) {

            if (csvRecord != null) {

                csvContent.append(formatCsvRecord(csvRecord, csvSeparator));

            }


            // Add default line separator.

            csvContent.append(DEFAULT_LINE_SEPARATOR);

        }


        return new ByteArrayInputStream(csvContent.toString().getBytes());

    }


    /**

     * CSV record formatter. Convert a List of Objects representing the fields of a CSV record to a

     * String representing the CSV record. The value of each Object will be obtained by its

     * toString() method. The fields of the CSV record will be separated by the specified CSV field

     * separator.

     *

     * @param csvRecord    A List of Objects representing the fields of a CSV reecord.

     * @param csvSeparator The CSV field separator to be used.

     * @return A String representing a CSV record.

     */

    private static <T extends Object> String formatCsvRecord(

            List<T> csvRecord, char csvSeparator) {


        // Prepare.

        StringBuilder fields = new StringBuilder();

        String separator = String.valueOf(csvSeparator);


        // Process fields.

        for (Iterator<T> iter = csvRecord.iterator(); iter.hasNext();) {

            T object = iter.next();


            if (object
展开阅读全文