这篇文章主要介绍“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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。