軟件世界園

             :: 首頁 :: 聯系 ::  :: 管理

          看項目中以前的處理方式是直接用用java IO類庫讀取Csv文件,實際處理中發現Csv文件本身包含了對各種特殊字符的處理信息。

          最常見的比如:

          1. 對包含特殊字符的字符串數據首尾加雙引號

          2. 對數據中的單個雙引號前加單個雙引號

          其它...

          所以用Java IO讀到的字符串全是經過處理后的字符串,在某些場景下是不符合預期需求的。比如我需要的是不做任何處理的原始內容。

          項目中另一種常見的文件格式Excel用了POI來處理,但是POI不支持Csv格式,于是找到了javacsv。

          代碼很簡單:

          Java代碼

          public List importCsv(String file) {

          List list = new ArrayList();

          CsvReader reader = null;

          try {

          //初始化CsvReader并指定列分隔符和字符編碼

          reader = new CsvReader(file, ',', Charset.forName("GBK"));

          while (reader.readRecord()) {

          //讀取每行數據以數組形式返回

          String[] str = reader.getValues();

          if (str != null && str.length > 0) {

          if (str[0] != null && !"".equals(str[0].trim())) {

          list.add(str);

          }

          }

          }

          } catch (FileNotFoundException e) {

          log.error("Error reading csv file.",e);

          } catch (IOException e) {

          log.error("",e);

          }

          finally{

          if(reader != null)

          //關閉CsvReader

          reader.close();

          }

          return list;

          }

          以上代碼有幾個要點:

          1 初始化CsvReader時指定分隔符和字符編碼,如果不指定,默認分別為逗號和ISO-8859-1,我用了GBK,具體使用時要看當時的字符編碼而定。

          2 讀取每行數據,返回字符串數組,數組內的順序即文件數據列的順序

          3 最后記得關閉CsvReader

          是不是很簡單,返回的數組格式也正好是我想要的,而且拿到是原始的數據,沒有經過特殊字符處理。

          有些童鞋質疑特殊字符未經處理,插到數據庫會出錯,其實大可不必我們手工處理,一些基礎組件比如JDBC的preparedstatement已經包含了對特殊字符的處理,我們只要以綁定參數的形式來傳送這些包含特殊字符的數據就可以。常用的持久化框架底層也封裝了JDBC,自然也對特殊字符做了處理。





                

          關于本文的作者 :

               名字很酷,據說愛軟件,愛網絡,愛游戲,愛數碼,愛科技,各種控,各種宅,不糾結會死星人,不折騰會死星人。此人屬虛構,如有雷同,純屬被抄襲……

           

          下面是我的聯系方式:

               大家有事沒事就騷擾一下我吧,只不過我經常忙不過來,不一定能很快回復你的郵件,希望別介意…… 下面是一些我主要的聯系方式,你可以根據自己的情況收聽它們,它們都會同步更新的!

            新浪微博 | 騰訊微博 | 河南論壇 | 河南健康網 | 博客園

          pasting
          posted on 2014-01-15 15:01 javaword 閱讀(221) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          軟件之家官網|三次元
          主站蜘蛛池模板: 巢湖市| 板桥市| 夏河县| 嘉禾县| 晴隆县| 镇巴县| 虞城县| 洞头县| 九寨沟县| 晋中市| 淄博市| 额敏县| 罗田县| 高雄县| 龙泉市| 贵南县| 安阳市| 龙门县| 丹凤县| 紫阳县| 腾冲县| 汽车| 灵台县| 枞阳县| 江阴市| 巴东县| 海盐县| 望江县| 怀宁县| 同德县| 加查县| 嫩江县| 山东| 剑阁县| 长丰县| 德阳市| 满洲里市| 北海市| 高平市| 平阴县| 扎囊县|