java實踐:02_讀寫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("無名").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);
    
    
    
    //先確定容器大小,再往里面按下標存放,最后再按序號拿出來處理
    Student[] students=new Student[5];
    System.out.println("數組的初始大小:"+students.length);
    students[2]=s3;
    students[3]=s4;
    students[4]=s5;
    students[0]=s1;
    students[1]=s2;
    System.out.println("數組放完數據后的大小:"+students.length);
    
    t.printStuByArray(students);
    
    //固定容器的問題:1、如果要放的東西太少,會浪費;2、如果要放的東西太多,又放不下
    //解決辦法:使用動態大小的容器
    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的問題:就是按照下標存的,也只能按照下標去取,但是無法通過標簽去找
    HashMap<String,Student> map=new HashMap<String,Student>();
    map.put("張三", s1);
    map.put("李四", s2);
    map.put("王二", s3);
    map.put("麻子", s4);
    map.put("無名", 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();
     
}
}

依賴包

        <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   固定大小:數組,先確定大小,再以下標存放數據,最后以下標取數據
     *      1.2 不固定大小:ArrayList,先add(數據)往里面添加數據(不能指定位置,因為是邊加邊擴,只能加到最后一個),get()以下標取數據
     *      1.3 不固定大小,且要按照標簽存放,按照標簽取數據:HashMap,先以put(“變量名”,數據)存數據,再以get("變量名")取數據
     * 
     * 2. 循環
     *      2.1 for循環:for(變量類型 定義一個變量=初始值;最大值;增量),知道最大循環次數的情況
     *      2.2 while循環:不知道要多少次,只知道一個結束的標識,循環到false為止
     * 
     * 3. if(帥嗎?){ok}else if(高嗎){ok}else if(有錢嗎?){ok}else{滾犢子!}
     * 
     * 4. try{業務邏輯}catch(Exception e){異常處理邏輯}
     *      4.1 e.printStackTrace():打印報錯日志信息
     *      4.2 錯誤日志閱讀方式:
     *              4.2.1 從上往下讀,也就是找到日志報錯開始的地方
     *              4.2.2 第一行是報錯類型
     *              4.2.3 后面是具體位置,at在哪兒,然后從后往前讀
     *              4.2.4 ()括號里面是哪個java文件的哪一行報錯
     *              4.2.5 倒數第一個:方法名
     *              4.2.6 倒數第二個:類名
     *              4.2.7 倒數第三個:包名
     */
    public static void readCSV(String csvFilePath) {
        //try{業務代碼}catch(Exception e){如果做業務的過程中出了錯,的異常處理邏輯}
        try {  
            //容器:對象少的時候,直接把對象列出來;當對象很多的時候,要用一個容器裝起來打包
            ArrayList<String[]> csvFileList = new ArrayList<String[]>();  
            // 這個不用背,只要看得懂會用就行。創建CSV讀對象 例如:CsvReader(文件路徑,分隔符,編碼格式);  
            CsvReader reader = new CsvReader(csvFilePath, ',', Charset.forName("UTF-8"));  
            // 跳過表頭 如果需要表頭的話,這句可以忽略  
            reader.readHeaders();  
            // 逐行讀入除表頭的數據  
            //boolean變量:真假true或者false
            while (reader.readRecord()) {  
                System.out.println(reader.getRawRecord());  
                //將一行的字符串按照“,”逗號分成多列,存放到String[]數組中
                //再將這個string[]放到list容器中存起來
                csvFileList.add(reader.getValues());   
            }  
            //數據取完了,關閉文件
            reader.close();  
              
            
           
            // 遍歷讀取的CSV文件  
            //for是一個整數次的循環,三個參數:最小值,最大值,增量,取個變量名存放每次循環的序列值
            for (int row = 0; row < csvFileList.size(); row++) {  
                // 取得第row行第0列的數據  
                String cell = csvFileList.get(row)[0];  
                System.out.println("------------>"+cell);  
            }  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  
    public static void writeCSV(String csvFilePath) {
        try {
            // 創建CSV寫對象 例如:CsvWriter(文件路徑,分隔符,編碼格式);
            CsvWriter csvWriter = new CsvWriter(csvFilePath, ',', Charset.forName("UTF-8"));
            // 寫表頭
            String[] csvHeaders = { "編號", "姓名", "年齡" };
            csvWriter.writeRecord(csvHeaders);
            // 寫內容
            for (int i = 0; i < 20; i++) {
                String[] csvContent = { i + "000000", "StemQ", "1" + i };
                csvWriter.writeRecord(csvContent);
            }
            csvWriter.close();
            System.out.println("--------CSV文件已經寫入--------");
        } 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", "");
        // 定義一個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)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容