12 文件读写

12 文件读写

1. 打开并读取文件

// Package main -----------------------------
// @file : file.go
// @author : Yunyin
// @contact : yunyin_jayyi@qq.com
// @time : 2023/7/28 12:00
// -------------------------------------------
package main

import (
"fmt"
"os"
)

func main() {
file, err := os.Open("a.txt")
if err != nil {
fmt.Println("打开文件失败", err)
return
}
defer file.Close()

content := make([]byte, 100)
n, err := file.Read(content)
if err != nil {
fmt.Println("文件读取失败", err)
return
}
fmt.Println(string(content[:n]))
//fmt.Println(content[:n])
}

2.写入文件

OpenFile函数参数:

  • 文件名

  • 打开模式:

    • os.O_CREATE:如果不存在则新建
    • os.O_TRUNC:覆盖原内容
    • os.O_WRONLY:只可写
    • os.O_APPEND:追加内容
  • 其它用户对该文件的权限:

    • 0666
    • 0644
// Package main -----------------------------
// @file : write_file.go
// @author : Yunyin
// @contact : yunyin_jayyi@qq.com
// @time : 2023/7/28 18:19
// -------------------------------------------
package main

import (
"fmt"
"os"
)

func main() {
file, err := os.OpenFile("b.txt",
os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
if err != nil {
fmt.Println("打开文件失败", err)
return
}
defer file.Close()
content := "Hello, 这里是goland"
n, err := file.Write([]byte(content))
if err != nil {
fmt.Println("写文件失败", err)
return
} else {
fmt.Println("成功向文件写入", n, "个字符")
}
}

3. 实战

​ 下面是一个读取文件的实战案例:

// Package main -----------------------------
// @file : file_use.go
// @author : Yunyin
// @contact : yunyin_jayyi@qq.com
// @time : 2023/7/28 20:58
// -------------------------------------------
package main

import (
"bufio"
"fmt"
"io"
"os"
)

func main() {
file, err := os.Open("b.txt")
if err != nil {
fmt.Println("打开文件失败", err)
return
}
defer file.Close()

reader := bufio.NewReader(file) //使用缓冲的io,一次io读取很多数据到内存,再从内存里读取
s := ""
for {
line, err := reader.ReadString('\n')
if err != nil {
if err == io.EOF {
s += line
fmt.Println("文件读取结束")
} else {
fmt.Println("出错了", err)
}
break
}
s += line
}
fmt.Println(s)
}