最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1. 需求和思路

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

2. 現(xiàn)有方法

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

Java OpenCSV|極客教程

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

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文件里的方法切分開,每一個方法視為一個樣本,content的部分就是方法的代碼。由于方法里面有各種字符,如引號,直接寫入csv會出現(xiàn)錯位、串行、串列的問題。于是我在mycsv里面加了一個CSVFormatter,這塊代碼主要參考了下文。

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

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

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

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

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

    /**
     * @description: 處理csv文件字段中需要轉(zhuǎn)義的引號
     *               添加雙引號,防止被字段中的逗號和換行符干擾
     *               使其顯示為一個單元格
     * @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工具類的,使用的時候建議還是使用成熟的工具類,也就不用操心這些轉(zhuǎn)義字符的問題了。hutool 工具類里就有現(xiàn)成的CsvUtil。我這個是懶得引用額外的包,所以就自己簡單處理了。

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

  • 開頭是不留空,以行為單位。
  • 可含或不含列名,含列名則居文件第一行。
  • 一行數(shù)據(jù)不跨行,無空行。
  • 以半角英文逗號(即,)作分隔符,列為空也要表達(dá)其存在。
  • 列內(nèi)容如存在半角引號(即"),替換成半角雙引號(“”)轉(zhuǎn)義,即用半角引號(即"")將該字段值包含起來。
  • 文件讀寫時引號,逗號操作規(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot 部署過程解析(jar or war)

    Spring Boot 部署過程解析(jar or war)

    這篇文章主要介紹了Spring Boot 部署過程解析(jar or war),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • 入門到精通Java?SSO單點(diǎn)登錄原理詳解

    入門到精通Java?SSO單點(diǎn)登錄原理詳解

    這篇文章主要介紹了入門到精通Java?SSO單點(diǎn)登錄原理詳解,本文主要對SSO單點(diǎn)登錄與CAS、OAuth2.0兩種授權(quán)協(xié)議的關(guān)系和原理進(jìn)行詳細(xì)說明
    2022-09-09
  • java生成餅圖svg及JFreeChart生成svg圖表

    java生成餅圖svg及JFreeChart生成svg圖表

    java生成餅圖svg,代碼實(shí)現(xiàn)感覺有點(diǎn)復(fù)雜,個人認(rèn)為不如用JFreeChart,這篇文章主要介紹java生成餅圖svg及JFreeChart生成svg圖表,有需要的小伙伴可以參考下
    2015-08-08
  • Spring?Boot?利用注解方式整合?MyBatis

    Spring?Boot?利用注解方式整合?MyBatis

    這篇文章主要介紹了Spring?Boot?利用注解方式整合?MyBatis,文章圍繞主主題的相關(guān)資料展開詳細(xì)的內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-05-05
  • Java實(shí)現(xiàn)的進(jìn)制轉(zhuǎn)換工具類完整示例

    Java實(shí)現(xiàn)的進(jìn)制轉(zhuǎn)換工具類完整示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的進(jìn)制轉(zhuǎn)換工具類,結(jié)合完整實(shí)例形式分析了Java實(shí)現(xiàn)二進(jìn)制、十六進(jìn)制、字符串、數(shù)組等相關(guān)轉(zhuǎn)換操作技巧,需要的朋友可以參考下
    2018-07-07
  • 完美解決Eclipse 項(xiàng)目有紅感嘆號的問題

    完美解決Eclipse 項(xiàng)目有紅感嘆號的問題

    下面小編就為大家?guī)硪黄昝澜鉀QEclipse 項(xiàng)目有紅感嘆號的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Java數(shù)據(jù)結(jié)構(gòu)之簡單鏈表的定義與實(shí)現(xiàn)方法示例

    Java數(shù)據(jù)結(jié)構(gòu)之簡單鏈表的定義與實(shí)現(xiàn)方法示例

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之簡單鏈表的定義與實(shí)現(xiàn)方法,簡單描述了鏈接的概念、原理,并結(jié)合實(shí)例形式分析了java定義與使用鏈表的相關(guān)步驟與操作技巧,需要的朋友可以參考下
    2017-10-10
  • mybatis返回map結(jié)果集@MapKey使用的場景分析

    mybatis返回map結(jié)果集@MapKey使用的場景分析

    這篇文章主要介紹了mybatis返回map結(jié)果集@MapKey使用的場景分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java?Cookie與Session實(shí)現(xiàn)會話跟蹤詳解

    Java?Cookie與Session實(shí)現(xiàn)會話跟蹤詳解

    session的工作原理和cookie非常類似,在cookie中存放一個sessionID,真實(shí)的數(shù)據(jù)存放在服務(wù)器端,客戶端每次發(fā)送請求的時候帶上sessionID,服務(wù)端根據(jù)sessionID進(jìn)行數(shù)據(jù)的響應(yīng)
    2022-11-11
  • 基于java使用釘釘機(jī)器人向釘釘群推送消息

    基于java使用釘釘機(jī)器人向釘釘群推送消息

    這篇文章主要介紹了基于java使用釘釘機(jī)器人向釘釘群推送消息,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11

最新評論

芦山县| 松滋市| 奈曼旗| 拉孜县| 隆化县| 龙井市| 含山县| 扬州市| 岚皋县| 东乡县| 和龙市| 灌南县| 临湘市| 博爱县| 尉犁县| 沧源| 鄂伦春自治旗| 黄骅市| 永昌县| 万山特区| 乌拉特中旗| 泗阳县| 蚌埠市| 盐津县| 青田县| 黄浦区| 黑河市| 正安县| 民县| 加查县| 南和县| 克山县| 泸西县| 河曲县| 外汇| 盐亭县| 师宗县| 革吉县| 栖霞市| 师宗县| 凌云县|