在Kotlin比赛后写入文件

时间:2016-12-22 08:40:28

标签: sed kotlin

Kotlin新手,我想在文件中的特定匹配后在文件中插入一行。我知道如何使用sed执行此操作:

function createAgreementTemplate(data, callback) {

    serviceHelper.createModel(AgreementTemplate,  'agreementTemplate', data, callback);

}

但是我想了解我如何在Kotlin中解决这个问题。到目前为止,我已经得到了printWriter接口,但我没有看到任何明显暗示偏移或正则表达式参数的东西。

到目前为止,我已经:

function createModel(model, modelName, modelData, callback) {
    logger.debug('Creating new Model : %s', modelName);
    var modelObj = model(modelData);
    modelObj.save(function (err, newModelObj) {
        if (err) {
            logger.error('Error adding new %s ! Error : %s', modelName, JSON.stringify(err));
            callback(utils.handleMongodbError(err), null);
        } else {
            logger.info('New Model of type : %s created with id : %s', modelName, JSON.stringify(newModelObj._id));
            var result = {};
            result.status = httpStatus.OK;
            result.result = newModelObj._id;
            callback(null, result);

        }
    });
}

谢谢!

1 个答案:

答案 0 :(得分:5)

GNU' sed'不插入/删除/更新文件中的行,它转换输入流并提供将输出流发送到stdout,文件,甚至临时文件的选项,然后在转换后覆盖原始文件已完成(这是--in-place选项)。

以下是一些应该让您入门的代码,但请注意,有很多方法可以缓冲和读/写文件,流等。

val file = File("file.txt")
val tempFile = createTempFile()
val regex = Regex("""some line in file""")
tempFile.printWriter().use { writer ->
    file.forEachLine { line ->
        writer.println(when {
            regex.matches(line) -> "a some text I'd like to add after line"
            else -> line
        })
    }
}
check(file.delete() && tempFile.renameTo(file)) { "failed to replace file" }

有关如何转换文本流的更多详细信息,另请参阅sed, a stream editor