针对文件的增删改查操作,梳理出4种处理方式。 注意,Golang至少1.16以上版本。
文件处理 (os 库)
写操作
函数原型
func WriteFile(name string, data []byte, perm FileMode) error
主要作用:写入文件内容,如果文件不存在则创建文件。 FileMode 参数可以指定权限列如 0755 支持八进制格式。
使用案例
func write() {
err := os.WriteFile("data1.txt", []byte("Test data..."), 0755)
if err != nil {
panic(err)
}
}
追加操作
函数原型
func OpenFile(name string, flag int, perm FileMode) (*File, error)
主要作用:写入文件内容,如果文件不存在则创建文件。 flag 参数可以指定权文件打开模式如O_APPEND 、O_CREATE 、O_WRONLY 。
使用案例
func append() {
f, err := os.OpenFile("data1.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0755)
if err != nil {
panic(err)
}
if _, err := f.Write([]byte("append some data\n")); err != nil {
panic(err)
}
}
使用内置函数 Write 追加写入到文件
读操作
函数原型
func ReadFile(name string) ([]byte, error)
主要作用:读取文件内容,传入字符串
使用案例
func read() {
data, err := os.ReadFile("data1.txt")
if err != nil {
panic(err)
}
os.Stdout.Write(data)
}
删除操作
函数原型
func Remove(name string) error
使用案例
func remove() {
err := os.Remove("data1.txt")
if err != nil {
panic(err)
}
}
使用 os 库进行操作文件处理, 可以实现对文件增删改查。
文件处理 (io 库)
写,追加操作
需要借助 os.OpenFile() 函数打开文件模式,使用io.WriteString函数写入。
函数原型
func WriteString(w Writer, s string) (n int, err error)
使用案例
func append() {
f, err := os.OpenFile("data.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0755)
if err != nil {
panic(err)
}
_, err1 := io.WriteString(f, "io test data...")
if err1 != nil {
panic(err1)
}
}
文件处理 (ioutil 库)
读操作
函数原型
func ReadFile(filename string) ([]byte, error)
使用案例
func read() {
content, err := ioutil.ReadFile("data.txt")
if err != nil {
panic(err)
}
fmt.Printf("%s",content)
}
写操作
函数原型
// 写入[]byte类型的data到filename文件中,文件权限为perm
func WriteFile(filename string, data []byte, perm fs.FileMode) error
使用案例
func write() {
err := ioutil.WriteFile("data.txt", []byte("ioutil test data...\n"), 0755)
if err != nil {
panic(err)
}
}
文件处理 (bufio 库)
写操作
函数原型
func NewWriter(w io.Writer) *Writer
其中w io.Writer参数,需要传入文件的指针可以通过os.OpenFile() 打开文件模式, 然后通过NewWriter调用内置函数 WriteString(s string) 写入字符串完成。
使用案例
func create() {
f, err := os.OpenFile("data.txt", os.O_RDWR|os.O_CREATE, 0755)
if err != nil {
panic(err)
}
w := bufio.NewWriter(f)
w.WriteString("bufio test data...\n")
w.Flush()
}
读操作
函数原型
func NewReader(rd io.Reader) *Reader
其中rd io.Reader参数,和写操作步骤可参考一样。
使用案例
func read() {
f, err := os.Open("data.txt")
if err != nil {
panic(err)
}
defer f.Close()
r := bufio.NewReader(f)
// 使用ReadString(delim byte)来读取delim以及之前的数据并返回相关的字符串
if content, err1 := r.ReadString(byte('b')); err1 == nil {
fmt.Println(content);
}
// 注意:上述ReadString已经将buffer中的数据读取出来了,下面将不会输出内容
// 需要注意的是,因为是将文件内容读取到[]byte中,因此需要对大小进行一定的把控
// 读取Reader对象中的内容到[]byte类型的buf中
buf := make([]byte, 1024)
if _, err := r.Read(buf); err == nil {
fmt.Println(string(buf))
}
}
其中os.Open() 打开一个文件并返回一个文件对象