<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最近要用java製作一個資料集,每一行是一個樣本,格式是csv。用了一下java類的相關概念,把csv檔案裡的每一行,即每一個樣本視為一個類。
目前已有的csv包如opencsv,可以支援字串,也可以支援javabean(即java類)。相關教學如下
由於牆的原因,我maven老是下載不到opencsv的jar包,沒辦法我只能手寫個平民版的
自定義的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] + "rn"); } } // 寫資料 for(CodeObject co: cos){ bw.append(co.getFilePath()+","); bw.append(co.getMethodName()+","); bw.append(CSVFormatter(co.getContent())+"rn"); } 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檔案個規則:
到此這篇關於Java實現將類資料逐行寫入CSV檔案的方法詳解的文章就介紹到這了,更多相關Java類資料寫入CSV檔案內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45