从文件中读取并将其写入另一个文件

Read from file and write it to another file

我需要在读取多个文件模板的基础上在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 

从上面的两个模板很明显,行数可能因模板而异。

模板中的关键词如日期名称年份等将替换为用户输入的值并写入文件。

用户可以select单独使用一个模板或将两个模板合并到一个文件中。 也就是说,如果用户 select 有一个模板,则用户输入的值将替换关键字并写入文件并保存。

如果用户 select 有两个模板,则必须读取这两个模板并将其保存为一个文件。

预期 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 

从上面的例子我们可以看到两个模板的首行和末行之间的行是写在一起的,但是首行和末行没有重复。 因为第一行和最后一行是页眉和页脚,所以不能来两次。

另一种情况是用户可以select一个模板并请求多行

使用模板 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();

我不太确定我理解你代码中参数替换的逻辑,所以我不能建议实际编辑,但如果你需要以特殊方式处理第一个和最后一个文件,你可以尝试类似的东西:

... {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);

您可以计算模板中的行数.. 存储第一个和第 n 个值 如果 1 或 n 与行号匹配,则循环文件内容.. 将它们分开存储...

执行字符串操作... 附加所有变量并将它们写入另一个文件...