如何使用JMeter JSR233 Postprocessor向CSV文件首行写入内容
JSR233 Postprocessor写入CSV首行解决方案
问题原因
你当前代码中FileOutputStream的第二个参数设为true,代表启用追加写入模式,所有新内容都会自动追加到文件末尾,因此无法写入第一行。
场景1:覆盖写入首行
如果你的需求是每次写入时清空文件原有内容,新内容作为首行(也可作为文件唯一内容),直接将FileOutputStream的第二个参数改为false即可,调整后代码如下:
temp_tax = new FileOutputStream("C://Users/eingel.f/Documents/jmtr/D1_Non_Reseller/temp_tax_rate.csv", false); file = new PrintStream(temp_tax); String tax_rate = source[parent]["tax_rate"] file.println(tax_rate+","+tax_rate+","+tax_rate) file.close(); temp_tax.close();
场景2:已有文件头部插入首行
如果需要保留文件原有内容,仅在最前面插入一行新的首行,需要先读取文件原有内容,将新行拼接在原有内容头部后再统一写回文件,推荐用Groovy简化写法(JMeter JSR233默认支持,性能更优):
def csvFile = new File("C://Users/eingel.f/Documents/jmtr/D1_Non_Reseller/temp_tax_rate.csv") // 读取原有内容,文件不存在则默认内容为空 def oldContent = csvFile.exists() ? csvFile.getText("UTF-8") : "" def tax_rate = source[parent]["tax_rate"] // 拼接新首行和原有内容 def newContent = "${tax_rate},${tax_rate},${tax_rate}\n" + oldContent // 指定UTF-8编码写回文件,避免乱码 csvFile.setText(newContent, "UTF-8")
注意事项
- 如果CSV文件体积大于100M,不建议用全量读取的方式写入首行,可改用临时文件中转:先把新首行写入临时文件,再逐行读取原文件内容追加到临时文件,最后删除原文件、将临时文件重命名为原文件名即可
- 写入CSV时如果内容包含逗号、双引号等特殊字符,建议按CSV标准做转义处理,避免后续读取文件出现格式错误。
内容的提问来源于stack exchange,提问作者maxim。
相关产品推荐
相关产品推荐

