CSVreader和POI操做用法比較,以及CSVReader的坑

  最近這段時間一直再作關於java和excel的一些東西,其實一直是在作這個java讀寫excel的需求 爲了可以知足各類excel格式,在項目裏裏面集成了xls,xlsx,csv三種格式。而後以list中放map的數據結構來存儲。poi能夠讀xls,xlsx。可是讀取poi不支持csv,因此用了其餘的一個類庫是au.com.bytecode.opencsv.CSVReaderhtml

在這裏比較小poi 和CSVReader之間的區別,以及其中須要注意的一些問題。

     一、poi在讀取excel的時候,他能夠監測到各類格式。好比,String,Booleaan,NUMERIC,blank,等等。可是在讀取數字類型的時候,讀進內存後,會出現科學計數法,咱們通常是這麼處理java

//使用DecimalFormat類對科學計數法格式的數字進行格式化數組

DecimalFormat df = new DecimalFormat("0"); 

contents = df.format(cell.getNumericCellValue());

         可是這種解決辦法會出現一個問題,就是小數也會給你格式化爲整數。在個人項目中我是用正則來匹配是否有.和E若是兩個都有的話,說明爲科學計數法而後將其格式化爲整數,不然就當字符串處理。網絡

     二、poi在讀取的Excel的時候,因爲03版本和07的差異,須要寫兩套方法來處理數據結構

     三、csvReader再讀取的時候,會按行一次往下讀取。讀出的每一行的數據結構爲一個字符串數組。(這種格式,其實並很差操做,不夠靈活)post

csvreader和poi的比較

     一、csvreader在讀取的時候,會按行讀取,可是若是數據後面有不少行爲空白,也會讀取。(若是你的代碼中有循環,在這裏若是不注意這個問題,會多循環不少次,我在項目中就被這個坑,給坑了)spa

     二、poi在這方面處理的很好,提供方法能夠直接定位到最後一行,若是數據結尾爲空白就不會讀取。.net

     三、在導出的時候,csv格式的則就會很快,poi來導出的話,數據量大的狀況會出現內存溢出的問題excel

附:易明白的csv讀寫例子 (來自於網絡)code

相關文章
相關標籤/搜索