• CSV文件解析


    CSV(逗号分隔值文件格式)

           逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。CSV文件格式的通用标准并不存在,但是在RFC 4180中有基础性的描述。使用的字符编码同样没有被指定,但是7-bitASCII是最基本的通用编码。
          java解析CSV文件的通用方法:
          其它辅组类参考   http://www.cnblogs.com/wshsdlau/p/5643862.html
           
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    import com.boguan.bte.service.common.IExcelRowReader;
    
    /**
     * 名称: CsvParser.java<br>
     * 描述: <br>
     * 类型: JAVA<br>
     * 最近修改时间:2016年7月6日 上午10:22:34<br>
     * 
     * @since 2016年7月6日
     * @author 
     */
    public class CsvReader {
    
        /**
         * Space mark , ; : etc.
         */
        private String spaceMark = ",";
    
        /**
         * CSV固定只有SHEET_NUM=0
         */
        private final static int SHEET_NUM = 0;
    
        /**
         * Contructor
         * 
         * @param inputCsvFile
         */
        public CsvReader() {
        }
    
        /**
         * 行读取
         */
        private IExcelRowReader rowReader;
    
        public void setRowReader(IExcelRowReader rowReader) {
            this.rowReader = rowReader;
        }
    
        /**
         * 从CSV文件中获取数组
         * 
         * @return
         * @throws IOException
         */
        public void process(String inputCsvFile) throws IOException {
            BufferedReader in = null;
            try {
                in = new BufferedReader(new FileReader(inputCsvFile));
                List<List<String>> retval = new ArrayList<List<String>>();
                String regExp = getRegExp();
                String strLine;
                String str = "";
                int rowNum = 0;
                List<String> listTemp = null;
                while ((strLine = in.readLine()) != null) {
                    Pattern pattern = Pattern.compile(regExp);
                    Matcher matcher = pattern.matcher(strLine);
                    listTemp = new ArrayList<String>();
                    while (matcher.find()) {
                        str = matcher.group();
                        str = str.trim();
                        if (str.endsWith(spaceMark)) {
                            str = str.substring(0, str.length() - 1);
                            str = str.trim();
                        }
                        if (str.startsWith(""") && str.endsWith(""")) {
                            str = str.substring(1, str.length() - 1);
                            if (CsvReader.isExisted("""", str)) {
                                str = str.replaceAll("""", """);
                            }
                        }
                        if (!"".equals(str)) {
                            listTemp.add(str);
                        }else{
                            listTemp.add(" ");
                        }
                    }
                    retval.add(listTemp);
                    rowReader.getRows(SHEET_NUM, rowNum, listTemp);
                    rowNum++;
                }
            } finally {
                if (in != null) {
                    in.close();
                }
            }
        }
    
        /**
         * Regular Expression for CSV parse
         * 
         * @return
         */
        private String getRegExp() {
            final String SPECIAL_CHAR_A = "[^",\n  ]";
            final String SPECIAL_CHAR_B = "[^"" + spaceMark + "\n]";
    
            StringBuffer strRegExps = new StringBuffer();
            strRegExps.append(""((");
            strRegExps.append(SPECIAL_CHAR_A);
            strRegExps.append("*[" + spaceMark + "\n  ])*(");
            strRegExps.append(SPECIAL_CHAR_A);
            strRegExps.append("*"{2})*)*");
            strRegExps.append(SPECIAL_CHAR_A);
            strRegExps.append("*"[  ]*" + spaceMark + "[  ]*");
            strRegExps.append("|");
            strRegExps.append(SPECIAL_CHAR_B);
            strRegExps.append("*[  ]*" + spaceMark + "[  ]*");
            strRegExps.append("|"((");
            strRegExps.append(SPECIAL_CHAR_A);
            strRegExps.append("*[" + spaceMark + "\n  ])*(");
            strRegExps.append(SPECIAL_CHAR_A);
            strRegExps.append("*"{2})*)*");
            strRegExps.append(SPECIAL_CHAR_A);
            strRegExps.append("*"[  ]*");
            strRegExps.append("|");
            strRegExps.append(SPECIAL_CHAR_B);
            strRegExps.append("*[  ]*");
            return strRegExps.toString();
        }
    
        /**
         * If argChar is exist in argStr
         * 
         * @param argChar
         * @param argStr
         * @return
         */
        private static boolean isExisted(String argChar, String argStr) {
    
            boolean blnReturnValue = false;
            if ((argStr.indexOf(argChar) >= 0) && (argStr.indexOf(argChar) <= argStr.length())) {
                blnReturnValue = true;
            }
            return blnReturnValue;
        }
    
    }
       
     
     
  • 相关阅读:
    ApplicationContext之getBean方法详解
    Windows10终端优化方案:Ubuntu子系统+cmder+oh-my-zsh
    向 Windows 高级用户进阶,这 10 款效率工具帮你开路 | 新手问号
    Ditto —— windows 剪贴板增强小工具(复制粘贴多条记录)
    Service Mesh服务网格:是什么和为什么
    正确理解Spring事务和数据库事务和锁
    Spring中@Transactional事务回滚(含实例详细讲解,附源码)
    五分钟搞清楚MySQL事务隔离级别
    事务并发的问题场景图解
    Spring的事务管理和数据库事务相关知识
  • 原文地址:https://www.cnblogs.com/wshsdlau/p/5646497.html
Copyright © 2020-2023  润新知