• Java将类数据逐行写入CSV文件,


    1. 需求和思路

    最近要用java制作一个数据集,每一行是一个样本,格式是csv。用了一下java类的相关概念,把csv文件里的每一行,即每一个样本视为一个类。

    2. 现有方法

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

    Java OpenCSV|极客教程 (geek-docs.com)https://geek-docs.com/java/java-tutorial/java-opencsv.html由于墙的原因,我maven老是下载不到opencsv的jar包,没办法我只能手写个平民版的

    3. 代码

    自定义的CodeObject类

    1. public class CodeObject {
    2. private String filePath;
    3. private String methodName;
    4. private String content;
    5. public void setFilePath(String filePath){ this.filePath = filePath;}
    6. public void setMethodName(String methodName) { this.methodName = methodName;}
    7. public void setContent(String content) { this.content = content;}
    8. public String getFilePath() { return filePath;}
    9. public String getMethodName() { return methodName;}
    10. public String getContent() { return content;}
    11. }

    mycsv类

    1. import java.io.BufferedWriter;
    2. import java.io.File;
    3. import java.io.FileWriter;
    4. import java.io.IOException;
    5. import java.util.ArrayList;
    6. public class mycsv {
    7. private File csvFile;
    8. public mycsv(String fileName){
    9. try {
    10. csvFile = new File(fileName);
    11. if (!csvFile.exists()){
    12. csvFile.createNewFile();
    13. }
    14. }catch (IOException e){
    15. System.out.println("error in io");
    16. }
    17. }
    18. public void writeCSVFile(String header[], ArrayList cos){
    19. try{
    20. FileWriter fw = new FileWriter(csvFile);
    21. BufferedWriter bw = new BufferedWriter(fw);
    22. // 写表头
    23. for (int i = 0; i < header.length; i++){
    24. if (i < header.length-1){
    25. bw.append(header[i] + ",");
    26. }else{
    27. bw.append(header[i] + "\r\n");
    28. }
    29. }
    30. // 写数据
    31. for(CodeObject co: cos){
    32. bw.append(co.getFilePath()+",");
    33. bw.append(co.getMethodName()+",");
    34. bw.append(CSVFormatter(co.getContent())+"\r\n");
    35. }
    36. bw.close();
    37. fw.close();
    38. }catch (IOException e){
    39. System.out.println("error in io");
    40. }
    41. }
    42. public String CSVFormatter(String s){
    43. if (s == null) {
    44. return "";
    45. }
    46. if (s.contains("\"")) {
    47. s = s.replaceAll("\"", "\"\"");
    48. }
    49. return "\"" + s + "\"";
    50. }
    51. }

    调用方式

    1. public static void main(String[] args) {
    2. ArrayList methods = new ArrayList<>();
    3. /*
    4. 一些操作将数据写入methods中
    5. */
    6. String header[] = {"FilePath", "MethodName", "Content"};
    7. mycsv m = new mycsv("a.csv");
    8. m.writeCSVFile(header, methods);
    9. }

    4. 参考

    因为我做的是把java文件里的方法切分开,每一个方法视为一个样本,content的部分就是方法的代码。由于方法里面有各种字符,如引号,直接写入csv会出现错位、串行、串列的问题。于是我在mycsv里面加了一个CSVFormatter,这块代码主要参考了下面这篇博客。

    Java处理CSV文件中的换行符等字符_pzzhao的博客-CSDN博客_csv 换行符https://blog.csdn.net/pzzhao/article/details/124648512另外其实很多关于java csv文件错位的博客内容都比较差,讲不清楚也就算了,甚至还提供了错误的代码,浪费了我很多时间,所以我写这篇博客帮大家踩坑。

  • 相关阅读:
    硕士应聘大专老师
    PPT文字很多的排版,PPT图片很多的排版,PPT图文排版
    qt信号与槽
    一个优质软件测试工程师简历,疯狂面试5家公司......
    【JavaSE】抽象类和接口重点语法知识汇总(附有代码)
    leetcode字符串
    《LeetCode力扣练习》代码随想录——数组(长度最小的子数组---Java)
    无swing,高级javaSE毕业之贪吃蛇游戏(含模块构建,多线程监听服务),已录制视频
    yum升级mysql
    Linux nm命令
  • 原文地址:https://blog.csdn.net/qq_42276781/article/details/127738206