微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有一种方法可以避免在Java中将重复的行写入文件?

如何解决有没有一种方法可以避免在Java中将重复的行写入文件?

我有一个简单的问题:

我有一些代码将数据行写入Java中的文本文件。一种将数据写入文件方法调用位于一种比数据本身更改频率更高的方法中。

结果,该文本文件包含从该方法写入的每一行的许多重复项。我知道我可以在事发后从文件删除这些重复项,但是我想知道是否有人知道一种避免在第一时间将重复行写入文件方法。感谢您的阅读。

将数据写入文件方法

@Override
public void writeMessage(String location,double time,String action) {
    write(location + " " + time + " " + action);
}

以及调用它的方法

public int receiveMessage(Message m,DTNHost from) {
    int retVal = this.router.receiveMessage(m,from);

    if (retVal == MessageRouter.RCV_OK) {
        m.addNodeOnPath(this);  // add this node on the messages path
    }

    writeMessage(untranslate().toString(),SimClock.getTime(),"receiving message");

    return retVal;
}

untranslate.toString()返回一对xy坐标作为字符串,而SimClock.getTime()返回时间戳。

我的解决方案是定义一个名为lastMsg的字符串,在该类的构造函数中将其初始化为null,然后检查receiveMessage()中message参数的ID是否具有在写入文件之前已更改:

public int receiveMessage(Message m,DTNHost from) {
    String currentMsg = m.getId();
    int retVal = this.router.receiveMessage(m,from);

    if (retVal == MessageRouter.RCV_OK) {
        m.addNodeOnPath(this);  // add this node on the messages path
    }
    if (!(currentMsg.equals(this.lastMsg))) {
        writeMessage(untranslate().toString(),"receiving message");
        this.lastMsg = currentMsg;
    }
    return retVal;
}

解决方法

似乎微不足道;该方法应检查“写的上一行”。如果相同,return;,则不执行任何操作。如果不是,则将其写入,然后更改“上一行已写入”字段。

如果要从多个线程中调用此方法,则可能会遇到麻烦(如果两个线程都调用向文件中写入“ Hello!”的方法,则可能会出现以下一行: {1}}-您需要进行一些同步,然后才能确保该字段也已同步。

HeHellllo!o!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。