欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實(shí)現(xiàn)將類數(shù)據(jù)逐行寫入CSV文件的方法詳解

 更新時(shí)間:2022年11月08日 10:18:10   作者:Toblerone_Wind  
這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)將類數(shù)據(jù)逐行寫入CSV文件,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的可以借鑒一下

1. 需求和思路

最近要用java制作一個(gè)數(shù)據(jù)集,每一行是一個(gè)樣本,格式是csv。用了一下java類的相關(guān)概念,把csv文件里的每一行,即每一個(gè)樣本視為一個(gè)類。

2. 現(xiàn)有方法

目前已有的csv包如opencsv,可以支持字符串,也可以支持javabean(即java類)。相關(guān)教程如下

Java OpenCSV|極客教程

由于墻的原因,我maven老是下載不到opencsv的jar包,沒辦法我只能手寫個(gè)平民版的

3. 代碼

自定義的CodeObject類

public class CodeObject {
    private String filePath;
    private String methodName;
    private String content;
 
    public void setFilePath(String filePath){ this.filePath = filePath;}
    public void setMethodName(String methodName) { this.methodName = methodName;}
    public void setContent(String content) { this.content = content;}
 
    public String getFilePath() { return filePath;}
    public String getMethodName() { return methodName;}
    public String getContent() { return content;}
}

mycsv類

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
 
public class mycsv {
    private File csvFile;
 
    public mycsv(String fileName){
        try {
            csvFile = new File(fileName);
            if (!csvFile.exists()){
                csvFile.createNewFile();
            }
        }catch (IOException e){
            System.out.println("error in io");
        }
    }
    public void writeCSVFile(String header[], ArrayList<CodeObject> cos){
        try{
            FileWriter fw  = new FileWriter(csvFile);
            BufferedWriter bw = new BufferedWriter(fw);
            // 寫表頭
            for (int i = 0; i < header.length; i++){
                if (i < header.length-1){
                    bw.append(header[i] + ",");
                }else{
                    bw.append(header[i] + "\r\n");
                }
            }
            // 寫數(shù)據(jù)
            for(CodeObject co: cos){
                bw.append(co.getFilePath()+",");
                bw.append(co.getMethodName()+",");
                bw.append(CSVFormatter(co.getContent())+"\r\n");
            }
            bw.close();
            fw.close();
        }catch (IOException e){
            System.out.println("error in io");
        }
    }
    public String CSVFormatter(String s){
        if (s == null) {
            return "";
        }
        if (s.contains("\"")) {
            s = s.replaceAll("\"", "\"\"");
        }
        return "\"" + s + "\"";
    }
}

調(diào)用方式

public static void main(String[] args) {
        ArrayList<CodeObject> methods = new ArrayList<>();
        /*
            一些操作將數(shù)據(jù)寫入methods中
        */
        String header[] = {"FilePath", "MethodName", "Content"};
        mycsv m = new mycsv("a.csv");
        m.writeCSVFile(header, methods);
}

4. 參考

因?yàn)槲易龅氖前裫ava文件里的方法切分開,每一個(gè)方法視為一個(gè)樣本,content的部分就是方法的代碼。由于方法里面有各種字符,如引號(hào),直接寫入csv會(huì)出現(xiàn)錯(cuò)位、串行、串列的問題。于是我在mycsv里面加了一個(gè)CSVFormatter,這塊代碼主要參考了下文。

Java處理CSV文件中的換行符等字符

開發(fā)的時(shí)候需要導(dǎo)出一批數(shù)據(jù),為了方便使用的CSV格式。當(dāng)時(shí)就只是簡(jiǎn)單的用逗號(hào)分隔,但是因?yàn)椴糠肿侄魏袚Q行符、引號(hào)、逗號(hào),導(dǎo)致用Excel打開的時(shí)候部分?jǐn)?shù)據(jù)錯(cuò)位了,于是又將那幾個(gè)字段處理了一下。

CSV文件本質(zhì)是一種用逗號(hào)和(回車)換行符分割的文本文件,是可以直接中Excel打開的。

處理方式就是在這個(gè)字段前后添加雙引號(hào),并且將字段中原有的雙引號(hào)替換為兩個(gè)雙引號(hào)。

/**
 * @author pzzhao
 * @version 創(chuàng)建時(shí)間:2022-5-8 14:46
 */
public class CsvUtils {

    /**
     * @description: 處理csv文件字段中需要轉(zhuǎn)義的引號(hào)
     *               添加雙引號(hào),防止被字段中的逗號(hào)和換行符干擾
     *               使其顯示為一個(gè)單元格
     * @param value 待處理的字段值
     * @return: {@link String}
     * @author: pzzhao
     * @date: 2022-05-08 14:49:46
     */
    public static String processValueForCsv(String value) {
        if (value == null) {
            return "";
        }

        if (value.contains("\"")) {
            value = value.replaceAll("\"", "\"\"");
        }
         value = "\"" + value + "\"";

        return value;
    }
}

網(wǎng)上有很多現(xiàn)成的CSV工具類的,使用的時(shí)候建議還是使用成熟的工具類,也就不用操心這些轉(zhuǎn)義字符的問題了。hutool 工具類里就有現(xiàn)成的CsvUtil。我這個(gè)是懶得引用額外的包,所以就自己簡(jiǎn)單處理了。

下面附上CSV文件個(gè)規(guī)則:

  • 開頭是不留空,以行為單位。
  • 可含或不含列名,含列名則居文件第一行。
  • 一行數(shù)據(jù)不跨行,無空行。
  • 以半角英文逗號(hào)(即,)作分隔符,列為空也要表達(dá)其存在。
  • 列內(nèi)容如存在半角引號(hào)(即"),替換成半角雙引號(hào)(“”)轉(zhuǎn)義,即用半角引號(hào)(即"")將該字段值包含起來。
  • 文件讀寫時(shí)引號(hào),逗號(hào)操作規(guī)則互逆。
  • 內(nèi)碼格式不限,可為 ASCII、Unicode 或者其他。
  • 不支持?jǐn)?shù)字
  • 不支持特殊字符

到此這篇關(guān)于Java實(shí)現(xiàn)將類數(shù)據(jù)逐行寫入CSV文件的方法詳解的文章就介紹到這了,更多相關(guān)Java類數(shù)據(jù)寫入CSV文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實(shí)現(xiàn)數(shù)組翻轉(zhuǎn)的實(shí)現(xiàn)代碼

    Java實(shí)現(xiàn)數(shù)組翻轉(zhuǎn)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)數(shù)組翻轉(zhuǎn)的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • springboot登陸頁面圖片驗(yàn)證碼簡(jiǎn)單的web項(xiàng)目實(shí)現(xiàn)

    springboot登陸頁面圖片驗(yàn)證碼簡(jiǎn)單的web項(xiàng)目實(shí)現(xiàn)

    這篇文章主要介紹了springboot登陸頁面圖片驗(yàn)證碼簡(jiǎn)單的web項(xiàng)目實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-04-04
  • java hashtable實(shí)現(xiàn)代碼

    java hashtable實(shí)現(xiàn)代碼

    這篇文章介紹了java hashtable實(shí)現(xiàn)代碼,有需要的朋友可以參考一下
    2013-10-10
  • 淺談Mybatis獲取參數(shù)值的方式

    淺談Mybatis獲取參數(shù)值的方式

    本文主要介紹了Mybatis獲取參數(shù)值的方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Springboot 自定義校驗(yàn)代碼實(shí)例

    Springboot 自定義校驗(yàn)代碼實(shí)例

    這篇文章主要介紹了Springboot 自定義校驗(yàn)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 配置DispatcherServlet的方法介紹

    配置DispatcherServlet的方法介紹

    今天小編就為大家分享一篇關(guān)于配置DispatcherServlet的方法介紹,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 在SpringBoot: SpringBoot里面創(chuàng)建導(dǎo)出Excel的接口教程

    在SpringBoot: SpringBoot里面創(chuàng)建導(dǎo)出Excel的接口教程

    這篇文章主要介紹了在SpringBoot: SpringBoot里面創(chuàng)建導(dǎo)出Excel的接口教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • idea中如何連接hive

    idea中如何連接hive

    這篇文章主要介紹了idea中如何連接hive問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java SSM框架(Spring+SpringMVC+MyBatis)搭建過程

    Java SSM框架(Spring+SpringMVC+MyBatis)搭建過程

    最近一段時(shí)間搭建了ssm環(huán)境,并測(cè)試了幾個(gè)小項(xiàng)目,下面小編通過圖文并茂的形式給大家分享Java SSM框架(Spring+SpringMVC+MyBatis)搭建過程,需要的朋友參考下吧
    2017-11-11
  • spring?jpa集成依賴的環(huán)境準(zhǔn)備及實(shí)體類倉庫編寫教程

    spring?jpa集成依賴的環(huán)境準(zhǔn)備及實(shí)體類倉庫編寫教程

    這篇文章主要為大家介紹了spring?jpa集成依賴的環(huán)境準(zhǔn)備及實(shí)體類倉庫編寫教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03

最新評(píng)論