Java 从csv读取值并将占位符替换到模板中
试图找到解决办法,但到目前为止一无所获 使用Java,我正在尝试这样做: 1) 打开csv文件(具有多个值) 3) 保存这些值 4) 使用这些值将某些占位符替换到模板中 我已经找到了很多解决方案(比如Freemarker),但如果值的数量是固定的,它们就会起作用我正在寻找适用于n(n个未知数量的值!)值的东西 例如csv 1,2,3,…,n 模板 [第一个值][第二个值][第三个值][第四个值(如果csv中存在值),依此类推][第五个值(如果…),依此类推 请给我一个这样做的想法 请给我一个这样做的想法 逐行读取,然后使用逗号读取。一种方法是读取CSV文件,对于模板部分,避免使用静态标记,而是使用列表迭代 用于生成HTML列表的Freemarker模板示例如下:Java 从csv读取值并将占位符替换到模板中,java,csv,Java,Csv,试图找到解决办法,但到目前为止一无所获 使用Java,我正在尝试这样做: 1) 打开csv文件(具有多个值) 3) 保存这些值 4) 使用这些值将某些占位符替换到模板中 我已经找到了很多解决方案(比如Freemarker),但如果值的数量是固定的,它们就会起作用我正在寻找适用于n(n个未知数量的值!)值的东西 例如csv 1,2,3,…,n 模板 [第一个值][第二个值][第三个值][第四个值(如果csv中存在值),依此类推][第五个值(如果…),依此类推 请给我一个这样做的想法 请给我一个这样
<ul>
<#list rows as row>
<li>
<#list row as column>
${column}<#sep>, </#sep>
</#list>
</li>
</#list>
</ul>
-
${column},
阅读CSV并应用模板:
Configuration cfg = new Configuration();
Template template = cfg.getTemplate("src/template.ftl");
List<Iterable<String>> rows = new ArrayList<Iterable<String>>();
Map<String, Object> data = new HashMap<String, Object>();
data.put("rows", rows);
File csvData = new File("/path/to/csv");
CSVParser parser = CSVParser.parse(csvData, CSVFormat.RFC4180);
for (CSVRecord csvRecord : parser) {
Iterator<String> columns = csvRecords.iterator();
rows.add(columns);
}
Writer out = new OutputStreamWriter(System.out);
template.process(data, out);
out.flush();
Configuration cfg=新配置();
Template-Template=cfg.getTemplate(“src/Template.ftl”);
列表行=新建ArrayList();
映射数据=新的HashMap();
数据。放置(“行”,行);
文件csvData=新文件(“/path/to/csv”);
CSVParser parser=CSVParser.parse(csvData,CSVFormat.RFC4180);
for(CSVRecord CSVRecord:parser){
迭代器列=csvRecords.Iterator();
行。添加(列);
}
Writer out=新的OutputStreamWriter(System.out);
模板、流程(数据、输出);
out.flush();
我不确定我是否正确理解了您的问题,但是如果您想在一行中使用无限数量的占位符,请尝试类似于{n}
的方法,其中n可以是任何正整数。或者将n
设为字符串,即该占位符的名称。总的来说,我很难理解你到底在追求什么。您能否提供一些更详细的输入和所需输出的示例?例如,CSV:name、姓氏、称呼,例如模板[1]-[2]-[3]-[4]--由于CSV文件中没有第四个值,因此变为name-姓氏-称呼-[4]不存在。