文件
路径处理
go
filepath.Join("a", "b", "c.txt")
// a/b/c.txtgo
filepath.Base("/a/b/c.txt")
// c.txtgo
filepath.Dir("/a/b/c.txt")
// /a/bgo
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,否则数据可能还在缓冲区