csv文件类似下面的,该怎么读?
aaa,bbbb,cccc,dddd,eeee
aass,ssss,"dddd,aaaa,ssss","dddd,aaa,dd"
aaa,"sss,ssss,ssssss",ssssss,ddddd,gggg

解决方案 »

  1.   

    有读取csv文件的jar呢,lz百度下,或者csdn下。
      

  2.   

    cvs 能用excel打开 所以应该跟 excel差不多吧
      

  3.   

    有专门的解析jar包:http://sourceforge.net/projects/csvjdbc/
      

  4.   

    /**
         * 读取CSV文件中的数据
         * 
         * @param filePath :
         *            文件完整路径名
         * @return List<Map<String, String>>
         *            ArrayList的一个元素是文件的一行,LinkedHashMap的key是该单元格数据对应的字段名,value是单元格数据
         * @throws IOException 读写异常
         */
        public List<Map<String, String>> readFileData(String filePath)
            throws IOException
        {
            // 记录日志
            try
            {
                File file = new File(filePath);
                if (!file.exists())
                {
                    return null;
                }
            }
            catch (Exception e)
            {
                return null;
            }
            
            List<Map<String, String>> arrayList = new ArrayList<Map<String, String>>();
            //使用gb2312方式读取导入的主机文件,否则在linux上中文会出现乱码
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    new FileInputStream(filePath), "GB2312"));
            
            try
            {
                
                //字段名称列表,读取字段名称列表
                List<String> fieldNameList = getFieldNameList(reader);
                
                if (fieldNameList != null && !fieldNameList.isEmpty())
                {
                    // 取得单元格值数据
                    arrayList = getValueList(reader, fieldNameList);
                }
                // 字段名行值为空,登记位置
                else
                {
                }
                
            }
            catch (IOException e)
            {
                throw e;
            }
            finally
            {
                // 关闭流
                if (reader != null)
                {
                    reader.close();
                }
            }
            return arrayList;
        }
      

  5.   

      /**
         * 取得字段名数组
         * 
         * @param reader :
         *            单行数据
         * @return String
         *            特殊字符所在单元格完成的数据(去除了前后的")
         * @throws IOException 
         */
        List<String> getFieldNameList(BufferedReader reader)
            throws IOException
        {
            // 记录日志
            List<String> fieldNameList = new ArrayList<String>();
            String tmp = "";
            String tmpBak = "";
            while ((tmp = reader.readLine()) != null)
            {
                // 如果上一行数据不是完整的一行,则将改行和上一行数据合并
                if (!"".equals(tmpBak))
                {
                    StringBuffer strBuffer = new StringBuffer();
                    strBuffer.append(tmpBak);
                    strBuffer.append("\r\n");
                    strBuffer.append(tmp);
                    tmp = strBuffer.toString();
                    tmpBak = "";
                }
                
                String splitTmp = "#" + tmp + "#";
                String[] list = splitTmp.split(",");
                
                //去除前后的"#"
                list = delSpecialChar(list);
                // 如果文件中的改行不是完整的行,则跳到下一行处理
                if (!isPerfectRow(tmp))
                {
                    tmpBak = tmp;
                    continue;
                }
                else
                {
                    for (int k = 0; k < list.length; k++)
                    {
                        // 完整的单元格数据
                        String perfectStr = "";
                        //如果存在特殊字符
                        if (list[k].indexOf("\"") >= 0)
                        {
                            perfectStr = getValue(list, k, true);
                            k = k + sepcialCharDepth;
                            sepcialCharDepth = 0;
                        }
                        else
                        {
                            perfectStr = list[k];
                        }
                        
                        // 如果处理后的单元格数据有",则需要去掉多余的"
                        if (perfectStr.indexOf("\"") >= 0)
                        {
                            perfectStr = delExtraChar(perfectStr);
                        }
                        fieldNameList.add(perfectStr);
                    }
                    break;
                }
                
            }
            
            return fieldNameList;
        }
      

  6.   

     /**
         * 取得单元格值数据
         * 
         * @param reader :
         *            单行数据
         * @param fieldNameList :
         *           字段名称列表
         * @return List<LinkedHashMap<String, String>>
         *            单元格值数据
         * @throws IOException 
         */
        private List<Map<String, String>> getValueList(BufferedReader reader,
                List<String> fieldNameList) throws IOException
        {
            List<Map<String, String>> arrayList = new ArrayList<Map<String, String>>();
            // 获取完整的处理是否执行中的标识(true:执行中)
            boolean executingFlag = false;
            
            String tmp = "";
            String tmpBak = "";
            
            while ((tmp = reader.readLine()) != null)
            {
                // 如果上一行数据不是完整的一行,则将改行和上一行数据合并
                if (executingFlag)
                {
                    StringBuffer strBuffer = new StringBuffer();
                    if (isPerfectRowEnd(tmp))
                    {
                        executingFlag = false;
                        strBuffer.append(tmpBak);
                        strBuffer.append("\r\n");
                        strBuffer.append(tmp);
                        tmp = strBuffer.toString();
                        tmpBak = "";
                    }
                    else
                    {
                        strBuffer.append(tmpBak);
                        strBuffer.append("\r\n");
                        strBuffer.append(tmp);
                        tmpBak = strBuffer.toString();
                        continue;
                    }
                }
                
                LinkedHashMap<String, String> rowMap = new LinkedHashMap<String, String>();
                
                String splitTmp = "#" + tmp + "#";
                String[] list = splitTmp.split(",");
                
                //去除前后的"#"
                list = delSpecialChar(list);
                
                // 如果文件中的改行不是完整的行,则跳到下一行处理
                if (!isPerfectRow(tmp))
                {
                    executingFlag = true;
                    tmpBak = tmp;
                    continue;
                }
                
                int cellIndex = 0;
                for (int k = 0; k < list.length; k++)
                {
                    // 如果单元格所在的列数超过了字段名数据的总列数,则退出循环
                    if (cellIndex >= fieldNameList.size())
                    {
                        break;
                    }
                    // 完整的单元格数据
                    String perfectStr = "";
                    //如果存在特殊字符
                    if (list[k].indexOf("\"") >= 0)
                    {
                        perfectStr = getValue(list, k, true);
                        k = k + sepcialCharDepth;
                        sepcialCharDepth = 0;
                    }
                    else
                    {
                        perfectStr = list[k];
                    }
                    
                    // 如果处理后的单元格数据有",则需要去掉多余的"
                    if (perfectStr.indexOf("\"") >= 0)
                    {
                        perfectStr = delExtraChar(perfectStr);
                    }
                    rowMap.put(fieldNameList.get(cellIndex), perfectStr);
                    cellIndex++;
                }
                arrayList.add(rowMap);
            }
            return arrayList;
        }