Java 从csv读取值并将占位符替换到模板中

Java 从csv读取值并将占位符替换到模板中,java,csv,Java,Csv,试图找到解决办法,但到目前为止一无所获 使用Java,我正在尝试这样做: 1) 打开csv文件(具有多个值) 3) 保存这些值 4) 使用这些值将某些占位符替换到模板中 我已经找到了很多解决方案(比如Freemarker),但如果值的数量是固定的,它们就会起作用我正在寻找适用于n(n个未知数量的值!)值的东西 例如csv 1,2,3,…,n 模板 [第一个值][第二个值][第三个值][第四个值(如果csv中存在值),依此类推][第五个值(如果…),依此类推 请给我一个这样做的想法 请给我一个这样

试图找到解决办法,但到目前为止一无所获

使用Java,我正在尝试这样做:

1) 打开csv文件(具有多个值) 3) 保存这些值 4) 使用这些值将某些占位符替换到模板中

我已经找到了很多解决方案(比如Freemarker),但如果值的数量是固定的,它们就会起作用我正在寻找适用于n(n个未知数量的值!)值的东西

例如csv 1,2,3,…,n

模板 [第一个值][第二个值][第三个值][第四个值(如果csv中存在值),依此类推][第五个值(如果…),依此类推

请给我一个这样做的想法

请给我一个这样做的想法

逐行读取,然后使用逗号读取。一种方法是读取CSV文件,对于模板部分,避免使用静态标记,而是使用列表迭代

用于生成HTML列表的Freemarker模板示例如下:

<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]不存在。