java實(shí)踐:02_讀寫(xiě)CSV文件

基本功

student.java

package com.guoyasoft;

public class Student {
    public String name;
    public int age;
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + "]";
    }
}

teacher.java

package com.guoyasoft;

import java.util.ArrayList;
import java.util.HashMap;

public class Teacher {
    public void printStudent(Student s){
        System.out.println(s.toString());
    }
    
    public void printStuByArray(Student[] s){
        System.out.println(s[0].toString());
        System.out.println(s[1].toString());
        System.out.println(s[2].toString());
        System.out.println(s[3].toString());
        System.out.println(s[4].toString());
    }
    public void printStuByList(ArrayList s){
        for(int i=0;i<s.size();i++){
            System.out.println(s.get(i).toString());
        }
    }   
    
    public void printStuByMap(HashMap s){
        System.out.println(s.get("無(wú)名").toString());
        System.out.println(s.get("張三").toString());
        System.out.println(s.get("麻子").toString());
        System.out.println(s.get("王二").toString());
        System.out.println(s.get("李四").toString());
    }
}

Test.java

package com.guoyasoft;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

public class Test {
public static void main(String[] args) {
    Student s1=new Student();
    s1.name="s1";
    s1.age=1;
    
    Student s2=new Student();
    s2.name="s2";
    s2.age=2;
    
    Student s3=new Student();
    s3.name="s3";
    s3.age=3;

    
    Student s4=new Student();
    s4.name="s4";
    s4.age=4;

    
    Student s5=new Student();
    s5.name="s5";
    s5.age=5;
    
    
    Teacher t=new Teacher();
    t.printStudent(s1);
    t.printStudent(s2);
    t.printStudent(s3);
    t.printStudent(s4);
    t.printStudent(s5);
    
    
    
    //先確定容器大小谤职,再往里面按下標(biāo)存放,最后再按序號(hào)拿出來(lái)處理
    Student[] students=new Student[5];
    System.out.println("數(shù)組的初始大邢:"+students.length);
    students[2]=s3;
    students[3]=s4;
    students[4]=s5;
    students[0]=s1;
    students[1]=s2;
    System.out.println("數(shù)組放完數(shù)據(jù)后的大小:"+students.length);
    
    t.printStuByArray(students);
    
    //固定容器的問(wèn)題:1步脓、如果要放的東西太少逗栽,會(huì)浪費(fèi);2骑疆、如果要放的東西太多敛滋,又放不下
    //解決辦法:使用動(dòng)態(tài)大小的容器
    ArrayList<Student> list=new ArrayList<Student>();
    System.out.println("ArrayList的初始大行聿肌:"+list.size());
    list.add(s1);
    list.add(s2);
    list.add(s3);
    list.add(s4);
    list.add(s5);
    System.out.println("ArrayList的初始大小:"+list.size());
    
    
    list.get(0);
    list.get(1);
    list.get(2);
    list.get(3);
    list.get(4);
    
    for(int i=0;i<list.size();i++ ){
        Student s=list.get(i);
    }

    for(Student s :list){
        System.out.println(s.toString());
    }
    
    
    t.printStuByList(list);
    
    //arrayList的問(wèn)題:就是按照下標(biāo)存的绎晃,也只能按照下標(biāo)去取蜜唾,但是無(wú)法通過(guò)標(biāo)簽去找
    HashMap<String,Student> map=new HashMap<String,Student>();
    map.put("張三", s1);
    map.put("李四", s2);
    map.put("王二", s3);
    map.put("麻子", s4);
    map.put("無(wú)名", s5);

    //t.printStuByArray(students);
    //t.printStuByList(list);
    t.printStuByMap(map);

    
     int j=0;
     while(j<50){
        System.out.println();
        j++;
     }
     
     for(int k=0;k<50;k++){
        System.out.println();
     }
     for(Student s:list){
        
     }
     
     for(int k=0;k<list.size();k++){
         Student s=list.get(k);
     }
     
     
     
     
     Iterator i=list.iterator();
     Student s=(Student) i.next();
     
}
}

依賴(lài)包

        <dependency>
            <groupId>net.sourceforge.javacsv</groupId>
            <artifactId>javacsv</artifactId>
            <version>2.0</version>
        </dependency>

讀csv文件

package com.guoyasoft;

import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;

import com.csvreader.CsvReader;
import com.csvreader.CsvWriter;

public class JavaCSV {
    /**
     * 1. 容器:
     *      1.1   固定大小:數(shù)組庶艾,先確定大小袁余,再以下標(biāo)存放數(shù)據(jù),最后以下標(biāo)取數(shù)據(jù)
     *      1.2 不固定大性圩帷:ArrayList颖榜,先add(數(shù)據(jù))往里面添加數(shù)據(jù)(不能指定位置,因?yàn)槭沁吋舆厰U(kuò)煤裙,只能加到最后一個(gè))掩完,get()以下標(biāo)取數(shù)據(jù)
     *      1.3 不固定大小,且要按照標(biāo)簽存放硼砰,按照標(biāo)簽取數(shù)據(jù):HashMap且蓬,先以put(“變量名”,數(shù)據(jù))存數(shù)據(jù)题翰,再以get("變量名")取數(shù)據(jù)
     * 
     * 2. 循環(huán)
     *      2.1 for循環(huán):for(變量類(lèi)型 定義一個(gè)變量=初始值;最大值;增量)恶阴,知道最大循環(huán)次數(shù)的情況
     *      2.2 while循環(huán):不知道要多少次,只知道一個(gè)結(jié)束的標(biāo)識(shí)豹障,循環(huán)到false為止
     * 
     * 3. if(帥嗎冯事?){ok}else if(高嗎){ok}else if(有錢(qián)嗎?){ok}else{滾犢子血公!}
     * 
     * 4. try{業(yè)務(wù)邏輯}catch(Exception e){異常處理邏輯}
     *      4.1 e.printStackTrace():打印報(bào)錯(cuò)日志信息
     *      4.2 錯(cuò)誤日志閱讀方式:
     *              4.2.1 從上往下讀昵仅,也就是找到日志報(bào)錯(cuò)開(kāi)始的地方
     *              4.2.2 第一行是報(bào)錯(cuò)類(lèi)型
     *              4.2.3 后面是具體位置,at在哪兒累魔,然后從后往前讀
     *              4.2.4 ()括號(hào)里面是哪個(gè)java文件的哪一行報(bào)錯(cuò)
     *              4.2.5 倒數(shù)第一個(gè):方法名
     *              4.2.6 倒數(shù)第二個(gè):類(lèi)名
     *              4.2.7 倒數(shù)第三個(gè):包名
     */
    public static void readCSV(String csvFilePath) {
        //try{業(yè)務(wù)代碼}catch(Exception e){如果做業(yè)務(wù)的過(guò)程中出了錯(cuò)岩饼,的異常處理邏輯}
        try {  
            //容器:對(duì)象少的時(shí)候,直接把對(duì)象列出來(lái)薛夜;當(dāng)對(duì)象很多的時(shí)候籍茧,要用一個(gè)容器裝起來(lái)打包
            ArrayList<String[]> csvFileList = new ArrayList<String[]>();  
            // 這個(gè)不用背,只要看得懂會(huì)用就行梯澜。創(chuàng)建CSV讀對(duì)象 例如:CsvReader(文件路徑寞冯,分隔符,編碼格式);  
            CsvReader reader = new CsvReader(csvFilePath, ',', Charset.forName("UTF-8"));  
            // 跳過(guò)表頭 如果需要表頭的話晚伙,這句可以忽略  
            reader.readHeaders();  
            // 逐行讀入除表頭的數(shù)據(jù)  
            //boolean變量:真假true或者false
            while (reader.readRecord()) {  
                System.out.println(reader.getRawRecord());  
                //將一行的字符串按照“吮龄,”逗號(hào)分成多列,存放到String[]數(shù)組中
                //再將這個(gè)string[]放到list容器中存起來(lái)
                csvFileList.add(reader.getValues());   
            }  
            //數(shù)據(jù)取完了咆疗,關(guān)閉文件
            reader.close();  
              
            
           
            // 遍歷讀取的CSV文件  
            //for是一個(gè)整數(shù)次的循環(huán)漓帚,三個(gè)參數(shù):最小值,最大值午磁,增量尝抖,取個(gè)變量名存放每次循環(huán)的序列值
            for (int row = 0; row < csvFileList.size(); row++) {  
                // 取得第row行第0列的數(shù)據(jù)  
                String cell = csvFileList.get(row)[0];  
                System.out.println("------------>"+cell);  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
    public static void writeCSV(String csvFilePath) {
        try {
            // 創(chuàng)建CSV寫(xiě)對(duì)象 例如:CsvWriter(文件路徑毡们,分隔符,編碼格式);
            CsvWriter csvWriter = new CsvWriter(csvFilePath, ',', Charset.forName("UTF-8"));
            // 寫(xiě)表頭
            String[] csvHeaders = { "編號(hào)", "姓名", "年齡" };
            csvWriter.writeRecord(csvHeaders);
            // 寫(xiě)內(nèi)容
            for (int i = 0; i < 20; i++) {
                String[] csvContent = { i + "000000", "StemQ", "1" + i };
                csvWriter.writeRecord(csvContent);
            }
            csvWriter.close();
            System.out.println("--------CSV文件已經(jīng)寫(xiě)入--------");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        HashMap<String,String> map=new HashMap<String,String>();
        map.put("student", "c:\\StemQ.csv");
        map.put("teacher", "D://Teacher.txt");
        map.put("course", "");
        // 定義一個(gè)CSV路徑
        String csvFilePath = map.get("student");
        
        if(csvFilePath =="" || csvFilePath == null){
            System.out.println("路徑不能為空昧辽!");
        }else if(!csvFilePath.endsWith(".csv")){
            System.out.println("必須是.csv文件路徑");
        }else{
            //JavaCSV.writeCSV(csvFilePath);
            JavaCSV.readCSV(csvFilePath);
        }
    }
}

異常日志

java.io.FileNotFoundException: File c:\StemQ1.csv does not exist.
    at com.csvreader.CsvReader.<init>(Unknown Source)
    at com.guoyasoft.JavaCSV.readCSV(JavaCSV.java:41)
    at com.guoyasoft.JavaCSV.main(JavaCSV.java:101)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末衙熔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子搅荞,更是在濱河造成了極大的恐慌红氯,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咕痛,死亡現(xiàn)場(chǎng)離奇詭異痢甘,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)茉贡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)塞栅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人块仆,你說(shuō)我怎么就攤上這事构蹬。” “怎么了悔据?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵庄敛,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我科汗,道長(zhǎng)藻烤,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任头滔,我火速辦了婚禮怖亭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坤检。我一直安慰自己兴猩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布早歇。 她就那樣靜靜地躺著倾芝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪箭跳。 梳的紋絲不亂的頭發(fā)上晨另,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音谱姓,去河邊找鬼借尿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的路翻。 我是一名探鬼主播狈癞,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼帚桩!你這毒婦竟也來(lái)了亿驾?” 一聲冷哼從身側(cè)響起嘹黔,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤账嚎,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后儡蔓,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體郭蕉,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年喂江,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了召锈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡获询,死狀恐怖涨岁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吉嚣,我是刑警寧澤梢薪,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站尝哆,受9級(jí)特大地震影響秉撇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜秋泄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一琐馆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恒序,春花似錦瘦麸、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至与帆,卻和暖如春了赌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背玄糟。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工勿她, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人阵翎。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓逢并,卻偏偏與公主長(zhǎng)得像之剧,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子砍聊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容