Skip to content

文件

路径处理

go
filepath.Join("a", "b", "c.txt")
// a/b/c.txt
go
filepath.Base("/a/b/c.txt")
// c.txt
go
filepath.Dir("/a/b/c.txt")
// /a/b
go
filepath.Ext("test.txt")
// .txt

一次性读取

go
// os.ReadFile()

data, err := os.ReadFile("test.txt")
if err != nil {
    panic(err)
}

// data 是 []byte,所以需要转换
fmt.Println(string(data))

按行读取

go
file, err := os.Open("test.txt")
if err != nil {
    panic(err)
}
defer file.Close()

scanner := bufio.NewScanner(file)

for scanner.Scan() {
    line := scanner.Text()
    fmt.Println(line)
}

流式读取

go
file, err := os.Open("test.txt")
if err != nil {
    panic(err)
}
defer file.Close()

buf := make([]byte, 1024)

for {
    n, err := file.Read(buf)

    if err == io.EOF {
        break
    }

    fmt.Println(string(buf[:n]))
}

从某个位置开始度

go
file,err := os.Open("test.txt")
if err != nil {
    panic(err)
}

o2, err := file.Seek(6, 0)

go
file, err := os.Create("test.txt")
if err != nil {
    panic(err)
}
defer file.Close()

file.Write([]byte("hello"))

字符串写入

go
file.WriteString("hello")

一次性写入

go
os.WriteFile("test.txt", []byte("hello"), 0644)

buffer 写入

go
file, _ := os.Create("test.txt")
defer file.Close()

writer := bufio.NewWriter(file)

writer.WriteString("hello")
writer.WriteString("world")

writer.Flush()

一定要 Flush,否则数据可能还在缓冲区