247_尚硅谷_写文件的四种方式
1.打开一个存在的文件中, 将原来的内容覆盖成新的内容
package main
import (
"bufio"
"fmt"
"os"
)
// todo 2) 打开一个存在的文件中, 将原来的内容覆盖成新的内容 10句 "你好!"
func main() {
fmt.Printf("=============== 开始文件写入 ===============\n")
// 1. 打开文件
filePath := "C:/Users/wxe5szh/OneDrive - Bosch Group/PersonalDrive/task/golang_study/247_尚硅谷_写文件的四种方式/files/abc.txt"
// * 解释 os.OpenFile(文件路径, 读写模式打开文件 | 如果可能,打开时清空文件, 0666)
file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_TRUNC, 0666)
if err != nil {
fmt.Printf("open file err = %v", err)
return
}
// 及时关闭file句柄
defer file.Close()
// 准备写入内容 5句 “hello, Gardon”
str := "你好!!!!\n"
// 写入时使用带缓存的 *Writer
writer := bufio.NewWriter(file)
for i := 0; i < 10; i++ {
writer.WriteString(str)
}
// 因为writer是带缓存的,因此在调用WriterString方法时,
// 其实内容是先写入到缓存, 所以需要调用Flush方法,将缓存的数据
// 真正写入到文件中,否则文件中会丢失数据,会没有数据
// ! 一定要写!!!!!
writer.Flush()
fmt.Printf("=============== 结束文件写入 ===============")
}
2.打开一个存在的文件, 在原来的内容追加内容
package main
import (
"bufio"
"fmt"
"os"
)
// todo 3) 打开一个存在的文件, 在原来的内容追加内容 "ABC! ENGLISH!"
func main() {
fmt.Printf("=============== 开始文件写入 ===============\n")
// 1. 打开文件
filePath := "C:/Users/wxe5szh/OneDrive - Bosch Group/PersonalDrive/task/golang_study/247_尚硅谷_写文件的四种方式/files/abc.txt"
// * 解释 os.OpenFile(文件路径, 读写模式打开文件 | 如果可能,打开时清空文件, 0666)
file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
fmt.Printf("open file err = %v", err)
return
}
// 及时关闭file句柄
defer file.Close()
// 准备写入内容 5句 “hello, Gardon”
str := "ABC! ENGLISH!\n"
// 写入时使用带缓存的 *Writer
writer := bufio.NewWriter(file)
for i := 0; i < 10; i++ {
writer.WriteString(str)
}
// 因为writer是带缓存的,因此在调用WriterString方法时,
// 其实内容是先写入到缓存, 所以需要调用Flush方法,将缓存的数据
// 真正写入到文件中,否则文件中会丢失数据,会没有数据
// ! 一定要写!!!!!
writer.Flush()
fmt.Printf("=============== 结束文件写入 ===============")
}
3.1.打开一个存在的文件, 将原来的内容读出来显示在终端,并追加5句指定内容
package main
import (
"bufio"
"fmt"
"io"
"os"
)
// todo 4) 打开一个存在的文件, 将原来的内容读出来显示在终端,并追加 5句 "hello, 北京!"
func main() {
fmt.Printf("=============== 打开一个存在的文件, 将原来的内容读出来显示在终端,开始 ===============\n")
// 1. 打开文件
filePath := "C:/Users/wxe5szh/OneDrive - Bosch Group/PersonalDrive/task/golang_study/247_尚硅谷_写文件的四种方式/files/abc.txt"
// * 解释 os.OpenFile(文件路径, 读写模式打开文件 | 追加写, 0666)
file, err := os.OpenFile(filePath, os.O_RDWR|os.O_APPEND, 0666)
if err != nil {
fmt.Printf("open file err = %v", err)
return
}
// 及时关闭file句柄
defer file.Close()
// 先读取原来文件的内容,并显示在终端
reader := bufio.NewReader(file)
for {
str, err := reader.ReadString('\n') // 读到一个换行就结束, 逐行读取
// ! io.EOF 表示文件的末尾
if err == io.EOF {
break
}
fmt.Printf("str = %v", str)
}
// 准备写入内容 5句 “hello, Gardon”
str := "hello, 北京!\n"
// 写入时使用带缓存的 *Writer
writer := bufio.NewWriter(file)
for i := 0; i < 5; i++ {
writer.WriteString(str)
}
// 因为writer是带缓存的,因此在调用WriterString方法时,
// 其实内容是先写入到缓存, 所以需要调用Flush方法,将缓存的数据
// 真正写入到文件中,否则文件中会丢失数据,会没有数据
// ! 一定要写!!!!!
writer.Flush()
fmt.Printf("=============== 打开一个存在的文件, 将原来的内容读出来显示在终端,结束 ===============\n")
}
3.2.运行结果
浙公网安备 33010602011771号