隨筆-16  評(píng)論-54  文章-0  trackbacks-0
           

           

          1      基本介紹

          可以說(shuō)CSV格式的文件經(jīng)常碰到,何為CSV格式,CVS全稱comma-separated values,就是典型的用逗號(hào)隔開的文件,比如下面這種文件格式

          Name,company

          zhangsan,ibm

          lisi,oracle

          這種就是典型的CSV格式文件。不過(guò)也可以擴(kuò)展到其它符號(hào)隔開的字符,比如

          Name#company

          Zhangsan#ibm

          Lisi#oracle

          這種也算CSV格式

          Java開源框架CVSReader提供了一個(gè)輕量級(jí)、簡(jiǎn)單方便的統(tǒng)一操作接口可用,下面具體講解如何操作CVS格式

          2      安裝和使用

          2.1下載

          目前CSV reader的最新發(fā)布版本是1.8。我們可以從

          http://opencsv.sourceforge.net/

          上面下載到最新的csvreader包。

          2.2安裝

          直接把jar包分別存放到開發(fā)工程的類路徑下面即可使用。

          3      讀取CSV格式文件

          3.1基本簡(jiǎn)介

          首先,讀取CSV格式的文件需要?jiǎng)?chuàng)建一個(gè)CSVReader,如下

          CsvReader reader = new CsvReader(Reader r,  char c);

          其中第一個(gè)參數(shù)為讀取文件,第二個(gè)參數(shù)為分割符,比如“,”,或者“#

          另外,也有其它幾個(gè)參數(shù),可以查閱API,比如

          CsvReader reader = new CsvReader(InputStream r,  char c, Charset charset);等等

          其次,一般需要讀取頭信息,如下:

          reader.readHeaders();

          String[] headers = reader.getHeaders();

          讀取了后,指針就會(huì)移動(dòng)到下一行,也就是可以開始讀取文件內(nèi)容

          假如,有多行的話,可以用一個(gè)循環(huán)套入,例如下面:

                       while (reader.readRecord()) {

                              for (int i = 0; i < headers.length; i++) {

                                     String value = reader.get(headers[i]);

                                     System.out.print(value+" ");

                              }

                              System.out.println("");

                       }

          3.2綜合例子

          C盤下創(chuàng)建一個(gè)測(cè)試文件test.cvs,內(nèi)容如下:

          a#b#c

          1#2#3

          4#5#6

          下面是解析代碼:

                public static void main(String[] args) throws Exception {

          CsvReader reader = new CsvReader(new FileReader("c://csv.txt"), '#');

                       reader.readHeaders();

                       String[] headers = reader.getHeaders();

                       while (reader.readRecord()) {

                              for (int i = 0; i < headers.length; i++) {

                                     String value = reader.get(headers[i]);

                                     System.out.print(value+" ");

                              }

                              System.out.println("");

                       }

                }

          運(yùn)行以上程序,可以看到輸出

           1 2 3

           4 5 6

          4      CSV格式文件

          CSV格式文件也比較簡(jiǎn)單,寫每一列只要直接調(diào)用

          csvWriter.write()即可

          另外,寫完每行結(jié)束后,都要調(diào)用 csvWriter.endRecord();

          表示結(jié)束一行

          文件寫完畢后,要記得刷新一下并關(guān)掉,如下:

                 csvWriter.flush();

                 csvWriter.close();

          代碼如下:

              publicstaticvoid main(String[] args) throws Exception {

                 CsvWriter csvWriter = new CsvWriter(new FileWriter("c://test.text"), '#');

                 csvWriter.write("name");

                 csvWriter.write("company");

                 csvWriter.endRecord();

                 csvWriter.write("11");

                 csvWriter.write("12");

                 csvWriter.endRecord();

                 csvWriter.write("21");

                 csvWriter.write("22");

                 csvWriter.flush();

                 csvWriter.close();

             }

          }

          運(yùn)行以上程序,可以看到C盤下面創(chuàng)建了一個(gè)文件

          test.text

          內(nèi)容如下:

          name#company

          11#12

          21#22

          posted on 2008-10-31 14:42 jspark 閱讀(11817) 評(píng)論(3)  編輯  收藏

          評(píng)論:
          # re: 如何更方便地進(jìn)行CSV格式文件讀寫 2008-11-01 16:58 | 金山毒霸2008
          好像有一種文件,擴(kuò)展明就是CSV,一種常見的文件格式。  回復(fù)  更多評(píng)論
            
          # re: 如何更方便地進(jìn)行CSV格式文件讀寫[未登錄](méi) 2008-11-05 17:03 | jinn
          csv不就是一種文本嗎,直接讀文本文件的方式的就行了吧。
          讀:
          List<String> list = org.apache.commons.io.FileUtils.readLines(new File("test.csv"));

          寫:
          List list = new ArrayList();
          list.add("name,company");
          list.add("zhangsan","huipu");
          org.apache.commons.io.FileUtils.writeLines(new File("test.csv"), list);
            回復(fù)  更多評(píng)論
            
          # re: 如何更方便地進(jìn)行CSV格式文件讀寫[未登錄](méi) 2008-11-07 09:06 | jspark
          直接讀取有下面幾個(gè)問(wèn)題:
          1、你直接讀取,還要自己去切割每行?另外,還要考慮空的情況
          2、存在各種分割符

          寫的話也存在同樣的問(wèn)題,要自己拼符號(hào),多麻煩。  回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 华池县| 尚志市| 清远市| 维西| 临漳县| 巫山县| 时尚| 靖宇县| 加查县| 长治县| 土默特右旗| 正安县| 札达县| 出国| 明星| 丹寨县| 都兰县| 平罗县| 崇左市| 博兴县| 揭阳市| 垦利县| 嘉义市| 富顺县| 湖南省| 来安县| 普兰县| 兴山县| 武强县| 东方市| 巴林右旗| 黄平县| 新闻| 云霄县| 潮安县| 稻城县| 朝阳区| 江城| 灵武市| 长春市| 公主岭市|