如何写入文件中的特定位置

时间:2016-03-04 16:26:09

标签: file go

我正在编写一个命令行工具来帮助我构建我的项目。我需要能够向文件添加一行文本,但是要添加到特定位置。这是一个例子:

我有这个routes.js文件:

router.map({
  '/home':{
    name: 'home',
    component: Home
  },
  '/about':{
    name: 'about',
    component: About
  },
  '/quote':{
    name: 'quote',
    component: Quote
  }
})

现在我想运行一个命令来创建一个新路由my-cli generate route ExampleRoute

我希望能像这样编写路线:

router.map({
    '/home':{
    name: 'home',
    component: Home
  },
    '/about':{
    name: 'about',
    component: About
  },
    '/quote':{
    name: 'quote',
    component: Quote
  },
    '/example-route':{
    name: 'example-route',
    component: ExampleRoute
  }
})

附加到文件底部很容易,但如何写入特定位置?

1 个答案:

答案 0 :(得分:0)

对于像这样的小文件,最好将文件读入内存,修改它,然后再将其写回。

一种可能性是将其读入字符串列表,每行一个。然后将添加的行插入列表中。然后将列表写回文件。

另一种可能性是将文件解析为地图,将新元素插入地图,然后以所需格式将地图内容写入文件。

或者,如果您总是希望将新文本插入到文件末尾的固定偏移处,则可以读入一个字符串,并在最后插入新文本,如下所示:

package main

import (
    "io/ioutil"
    "log"
)

const textToInsert = `,
'/example-route':{
name: 'example-route',
component: ExampleRoute
  }
})
`

func main() {
    original, err := ioutil.ReadFile("routes.js")
    if err != nil {
        log.Fatal(err)
    }

    // replace last 4 characters with textToInsert
    modified := append(original[0:len(original)-4], []byte(textToInsert)...)

    err = ioutil.WriteFile("routes.js", modified, 0644)
    if err != nil {
        log.Fatal(err)
    }
}