您好,登錄后才能下訂單哦!
這篇文章主要介紹“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文件”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。