我需要在读取多个文件模板的基础上用java编写一个文件。
档案模板1:
010 Date 131231 131231 131231 131231 131231 131231
020 NAME 131231 131231 131231 131231 131231 131231
030 YEAR 131231 131231 131231 131231 131231 131231
090 xxx 131231 131231 131231 131231 131231 131231
文件模板2:
010 Date 131231 131231 131231 131231 131231 131231
040 NAME 131231 131231 131231 131231 131231 131231
050 YEAR 131231 131231 131231 131231 131231 131231
060 YEAR 131231 131231 131231 131231 131231 131231
090 xxx 131231 131231 131231 131231 131231 131231
从以上两个模板中可以清楚地看出,没有任何行可能因模板而异。
模板中的关键词如日期名称年份等将由用户输入的值替换,并将其写为文件。
用户可以单独选择一个模板,也可以在一个文件中组合两个模板。 即如果用户选择一个模板,则用户输入的值将替换关键字,并将在文件中写入并保存。
如果用户选择了两个模板,则必须读取这两个模板并将其保存为单个文件。
使用上述两种模板的预期o / p情景:
010 uservalue 131231 131231 131231 131231 131231 131231
020 uservalue 131231 131231 131231 131231 131231 131231
030 uservalue 131231 131231 131231 131231 131231 131231
040 uservalue 131231 131231 131231 131231 131231 131231
050 uservalue 131231 131231 131231 131231 131231 131231
060 uservalue 131231 131231 131231 131231 131231 131231
090 uservalue 131231 131231 131231 131231 131231 131231
从上面的例子我们可以看到两个模板的第一行和最后一行之间的行被写在一起,但不重复第一行和最后一行。 因为第一行和最后一行是页眉和页脚,所以它们不能两次。
另一种情况是用户可以选择一个模板并请求多行
使用模板1的预期输出(假设用户请求2行(循环):
010 uservalue 131231 131231 131231 131231 131231 131231
020 uservalue 131231 131231 131231 131231 131231 131231
030 uservalue 131231 131231 131231 131231 131231 131231
020 uservalue 131231 131231 131231 131231 131231 131231
030 uservalue 131231 131231 131231 131231 131231 131231
090 uservalue 131231 131231 131231 131231 131231 131231
即使此处页眉和页脚不包含在循环条件下,也只重复其间的行。 我的代码:
for(int i=o;i<loopcount;i++){
FileReader fr = new FileReader("C:/Templates/"
+ template[i]);
BufferedReader br = new BufferedReader(fr);
String putData=null,verify;
while ((verify = br.readLine()) != null) {
if (verify != null) {
putData = verify.replace("YYYYMMDD", yyyymmdd);
putData = putData.replace("IIIIIIIIIIIIIII",
imsi);
putData = putData.replace("DD", duration);
putData = putData.replace("HHMMSS", startTime);
putData = putData.replace("hhmmss", endTime);
putData = putData.replace("XXXXXXXXX", msisdn);
putData = putData.replace("UUUU", uplink);
putData = putData.replace("LLLL", downlink);
bw.append(putData + "\n");
}
}}
bw.flush();
bw.close();
br.close();
答案 0 :(得分:1)
您可以计算模板中的行数。 存储第1和第n个值 如果1或n与行号匹配,则循环文件内容..分别存储...
执行字符串操作...... 附加所有变量并将其写入另一个文件......
答案 1 :(得分:0)
我不太确定我理解代码中参数替换的逻辑,因此我无法建议实际编辑,但是如果您需要以特殊方式处理第一个和最后一个文件,你可以尝试类似的东西:
... {preceding code}
verify = br.readLine());
putData = verify.replace("YYYYMMDD", yyyymmdd);
bw.append(putData + "\n");
String strTempValue = null;
boolean isLastLine = false;
do {
strTempValue = br.readLine();
isLastLine = (null == strTempValue);
if (verify != null)
{
if(isLastLine)
{
// your footer logic
}
else
{
// file template body - "normal lines"
putData = verify.replace("YYYYMMDD", yyyymmdd);
putData = putData.replace("IIIIIIIIIIIIIII", imsi);
putData = putData.replace("DD", duration);
putData = putData.replace("HHMMSS", startTime);
putData = putData.replace("hhmmss", endTime);
putData = putData.replace("XXXXXXXXX", msisdn);
putData = putData.replace("UUUU", uplink);
putData = putData.replace("LLLL", downlink);
verify = strTempValue;
}
bw.append(putData + "\n");
}
}
while ((verify = br.readLine()) != null);