Java CSV文件写入、特殊字符处理等

简介: 1、生成CSV文件时要处理双引号、逗号、回车和中文字符

1、下面是处理双引号、逗号、回车和中文字符的通用方法,以后有时间再整理高率的方法

/**
     * 功能说明:获取UTF-8编码文本文件开头的BOM签名。
     * BOM(Byte Order Mark),是UTF编码方案里用于标识编码的标准标记。例:接收者收到以EF BB BF开头的字节流,就知道是UTF-8编码。
     * @return UTF-8编码文本文件开头的BOM签名
     */
    public static String getBOM() {
   
        byte b[] = {
   (byte)0xEF, (byte)0xBB, (byte)0xBF};
        return new String(b);
    }

    /**
     * 要处理 逗号,双引号、回车
     * 还有中文情况
     * ***/
    public static String commaDealText(String csvText) {
   
        if(csvText == null)
            return null;
        //如果有双引号,则要先处理双引号
        if(csvText.contains("\"")) {
   
            csvText = csvText.replaceAll("\"", "\"\"");
        }
        //如果有逗号 和 回车
        if(csvText.contains(",") || csvText.contains("\n")) {
   
            csvText = "\"" + csvText + "\"";
        }
        return csvText;
    }

    /**
     *     生成并下载csv文件
     * @param response
     * @param exportData
     * @param map
     * @param outPutPath
     * @param fileName
     * @throws IOException
     */
    @SuppressWarnings("rawtypes")
    public static MyResult exportDataFile(List<String> headerList, List<String> exportData,  String outPutPath, String fileName) throws IOException{
   

        MyResult res = new MyResult(true);
        File csvFile = null;
        BufferedWriter csvFileOutputStream = null;
        try {
   
            File file = new File(outPutPath);
            if (!file.exists()) {
   
                file.mkdirs();
            }
            //定义文件名格式并创建
            csvFile =new File(outPutPath+fileName+".csv");
            if(csvFile.exists()){
   
                csvFile.delete();
            }
            csvFile.createNewFile();
            // UTF-8使正确读取分隔符","
            //如果生产文件乱码,windows下用gbk,linux用UTF-8
            csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile), "UTF-8"), 1024);
            //写入前段字节流,防止乱码
            csvFileOutputStream.write(getBOM());
            /**** 写入文件头部内容 ***/
            if(headerList == null || headerList.isEmpty()) {
   
                res.setFlag(false);
                res.setMsg("headerList can not be null or empty");
                return res;
            }
            StringBuffer sb = new StringBuffer();
            sb.setLength(0);
            for(String headName : headerList) {
   
                headName = CSVUtils.commaDealText(headName);
                sb.append(headName).append(",");
            }
            csvFileOutputStream.write(sb.toString());
            //换行
            csvFileOutputStream.newLine();
            for(String data :  exportData) {
   
                csvFileOutputStream.write(data);
                csvFileOutputStream.newLine();
            }
            csvFileOutputStream.flush();
        } catch (Exception e) {
   
            //logger.error(e.getMessage(), e);
        } finally {
   
            try {
   
                csvFileOutputStream.close();
            } catch (IOException e) {
   
                //logger.error(e.getMessage(), e);
            }
        }
        return res;
     }
相关文章
|
5月前
|
JavaScript Java Android开发
在cmd中运行javac编译java文件报错: 编码GBK的不可映射字符、 非法字符: \65279
在cmd中运行javac编译java文件报错: 编码GBK的不可映射字符、 非法字符: \65279
77 1
|
3月前
|
Java
Java——编码GBK的不可映射字符
Java——编码GBK的不可映射字符
44 1
|
3月前
|
存储 Java
|
3月前
|
存储 Java Apache
|
4月前
|
Java API 索引
Java中的字符串与字符操作详解
Java中的字符串与字符操作详解
|
5月前
|
Java Serverless
Java字符个数统计代码
Java字符个数统计代码
86 6
|
5月前
|
Java
JAVA工具类匹配重复或者连续的字符和符号
JAVA工具类匹配重复或者连续的字符和符号
|
5月前
|
存储 Java Maven
如何在Java中导入和导出CSV文件
如何在Java中导入和导出CSV文件
287 2
|
4月前
|
Java API 索引
Java中的字符串与字符操作详解
Java中的字符串与字符操作详解