2019年第一篇博客
兜兜转转又回来更新go的博客了,今天来讲一下如何使用golang进行文件的读写
文件读写需要使用的包
- os
- ioutil
- bufio
- strings
文件读写总是少不了判断文件是否存在!
假如文件不存在就返回errorIsNotExist 判断 有 error说明文件不存在
show me your code?
// 判断文件是否存在
if _, err := os.Stat(filename); os.IsNotExist(err) {
return err
}
按行读文件
按行读取有两种方式 1 读取整个文件然后按照\n 分割,再循环读取 2 使用ioutil.ReadLine
func Readlines(filename string) {
// go 按行读取文件的方式有两种,
// 第一 将读取到的整个文件内容按照 \n 分割
// 使用bufio
// 第一种
lines, err := ioutil.ReadFile(filename)
if err != nil {
fmt.Println(err)
} else {
contents := string(lines)
lines := strings.Split(contents, "\n")
for _, line := range lines {
fmt.Println(line)
}
}
// 第二种
fd, err := os.Open(filename)
defer fd.Close()
if err != nil {
fmt.Println("read error:", err)
}
buff := bufio.NewReader(fd)
for {
data, _, eof := buff.ReadLine()
if eof == io.EOF {
break
}
fmt.Println(string(data))
}
}
写文件
os.Open方式是只读的方式打开的,这样无法写入也没有报错打开的方式为 os.O_RDWR|os.O_APPEND 这样才能使用写入,并且会追加写入
func WriterTXT(filename, content string) error {
// 写入文件
// 判断文件是否存在
if _, err := os.Stat(filename); os.IsNotExist(err) {
return err
}
fd, err := os.OpenFile(filename, os.O_RDWR|os.O_APPEND, 0666)
defer fd.Close()
if err != nil {
return err
}
w := bufio.NewWriter(fd)
_, err2 := w.WriteString(content)
if err2 != nil {
return err2
}
w.Flush()
fd.Sync()
return nil
}