91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java怎么實現將類數據逐行寫入CSV文件

發布時間:2022-11-09 09:20:03 來源:億速云 閱讀:136 作者:iii 欄目:開發技術

這篇文章主要介紹“Java怎么實現將類數據逐行寫入CSV文件”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Java怎么實現將類數據逐行寫入CSV文件”文章能幫助大家解決問題。

代碼

自定義的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");
                }
            }
            // 寫數據
            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 + "\"";
    }
}

調用方式

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

參考

因為我做的是把java文件里的方法切分開,每一個方法視為一個樣本,content的部分就是方法的代碼。由于方法里面有各種字符,如引號,直接寫入csv會出現錯位、串行、串列的問題。于是我在mycsv里面加了一個CSVFormatter,這塊代碼主要參考了下文。

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

開發的時候需要導出一批數據,為了方便使用的CSV格式。當時就只是簡單的用逗號分隔,但是因為部分字段含有換行符、引號、逗號,導致用Excel打開的時候部分數據錯位了,于是又將那幾個字段處理了一下。

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

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

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

    /**
     * @description: 處理csv文件字段中需要轉義的引號
     *               添加雙引號,防止被字段中的逗號和換行符干擾
     *               使其顯示為一個單元格
     * @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;
    }
}

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

下面附上CSV文件個規則:

  • 開頭是不留空,以行為單位。

  • 可含或不含列名,含列名則居文件第一行。

  • 一行數據不跨行,無空行。

  • 以半角英文逗號(即,)作分隔符,列為空也要表達其存在。

  • 列內容如存在半角引號(即"),替換成半角雙引號(“”)轉義,即用半角引號(即"")將該字段值包含起來。

  • 文件讀寫時引號,逗號操作規則互逆。

  • 內碼格式不限,可為 ASCII、Unicode 或者其他。

  • 不支持數字

  • 不支持特殊字符

關于“Java怎么實現將類數據逐行寫入CSV文件”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

普陀区| 光泽县| 昭通市| 渝中区| 大城县| 手游| 卓尼县| 黑水县| 大足县| 霍林郭勒市| 磴口县| 佛教| 五寨县| 崇阳县| 娱乐| 玛纳斯县| 胶州市| 出国| 噶尔县| 德令哈市| 时尚| 高邑县| 新宾| 阿克陶县| 霍城县| 绵竹市| 淮滨县| 高青县| 青浦区| 安岳县| 奉化市| 兴海县| 保靖县| 定州市| 开江县| 竹山县| 金昌市| 隆安县| 固安县| 曲阜市| 榆林市|