中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

漠河县| 广元市| 五常市| 宾川县| 花垣县| 葫芦岛市| 永靖县| 诸城市| 马鞍山市| 南江县| 宿松县| 灌阳县| 鸡泽县| 常德市| 腾冲县| 定边县| 微博| 墨江| 辉南县| 来安县| 镇赉县| 湘潭县| 宁化县| 张家界市| 临清市| 延安市| 宁强县| 禹城市| 寻乌县| 阳曲县| 酉阳| 随州市| 辽阳县| 常宁市| 洮南市| 贡山| 阿城市| 武宣县| 阿尔山市| 泌阳县| 台东县|