如何通过java在现有文件中有效地附加语句

时间:2014-05-14 07:24:31

标签: java file read-write

我想将以下语句附加到已存在的文件中。

setOneMoreWorkingLineWithServiceID("01014051484", "84", "PSTN Single Line", "N", "", "A line in e2e", "", "NTE", "", "", "Standard", "");

原始文件

package config;

public class ABC extends LineAvailabilityNew
{

    public ABC(Message msg) throws MessageHandlerExcection
    {
        super(msg);
    }

    public void doMessageDataOverrides() throws MessageHandlerExcection
    {
        super.doMessageDataOverrides();
        setWorkingLineQty("21");
        setStoppedLineQty("10");
        setworkingLineExchangeGroupCode("GOL");
        setWorkingLineWithServiceID("01014013024", "24", "MPF", "N", "N", "A line in e2e", "", "NTE", "GOL", "", "Standard", "");
        setOneMoreWorkingLineWithServiceID("01014013025", "25", "MPF", "N", "N", "A line in e2e", "", "NTE", "GOL", "", "Standard", "");
        setOneMoreWorkingLineWithServiceID("01014013026", "26", "MPF", "N", "N", "A line in e2e", "", "NTE", "GOL", "", "Standard", "");
        setOneMoreStoppedLineWithServiceID("01014013015", "15", "PSTN Single Line", "N", "N", "", "NTE", "GOL", "", "Standard", "");

    }
}

标准:

  1. 原始文件的内容并不总是相同。即doMessageDataOverrides()内的呼叫可能会有所不同。

  2. 如果setOneMoreWorkingLineWithServiceID()已经存在,那么我需要在setOneMoreWorkingLineWithServiceID()的最后一次出现后添加新的陈述行。

  3. 如果setOneMoreWorkingLineWithServiceID()不存在,那么我需要在setworkingLineExchangeGroupCode()/setStoppedLineQty()

  4. 之后添加语句

    如何将语句添加到现有文件中并满足给定条件?

2 个答案:

答案 0 :(得分:0)

我认为你的类需要一些子类并覆盖doMessageDataOverrides()方法。您无法动态更改类,它们不是面团,但您可以使用正确的ABC子类。

答案 1 :(得分:0)

我看到了这个问题的多种解决方案

简单的Java Streams

使用流并查找doMessageDataOverrides(),然后查找setOneMoreStoppedLineWithServiceID(并将所需的行添加到正确的位置。

搜索和替换

您可以使用一些魔术搜索并替换正则表达式来查找正确的行并编辑您的文件

Java Parser

使用像JDT这样的Java解析器,创建一个AST,遍历AST并插入所需的节点。我认为这是最强大的一个。