Go语言的文件处理操作

张开发
2026/5/19 9:05:36 15 分钟阅读
Go语言的文件处理操作
文件处理是编程中最常用的功能之一无论是读取配置、写入日志、处理文本还是数据存储都离不开文件操作。Go 语言提供了非常简洁、强大的标准库来完成文件的创建、读写、复制、删除、判断等操作最核心的包是os和io/ioutilGo 1.16 后推荐使用os和io。本文从最基础到最常用一步步讲解代码可直接复制运行适合作业、考试、实战使用。一、文件操作必备包Go 语言文件操作主要使用 3 个包os文件打开、创建、删除、权限、状态判断bufio带缓冲的读写高效读写大文件io基础读写接口path/filepath路径处理跨平台二、文件打开与关闭1. 打开文件os.Openfile, err : os.Open(test.txt)作用以只读方式打开文件。2. 创建文件os.Createfile, err : os.Create(test.txt)作用创建新文件若文件已存在则清空内容。3. 打开文件并指定模式os.OpenFile最强大的打开方式可指定只读只写追加读写file, err : os.OpenFile(test.txt, os.O_APPEND|os.O_WRONLY, 0666)常用模式os.O_RDONLY只读os.O_WRONLY只写os.O_RDWR读写os.O_CREATE不存在则创建os.O_APPEND追加写os.O_TRUNC清空文件4. 关闭文件defer file.Close ()文件打开后必须关闭否则会造成资源泄漏。固定写法file, err : os.Open(test.txt) if err ! nil { fmt.Println(打开失败, err) return } defer file.Close() // 自动关闭三、文件读取操作4 种常用方法1. 一次性读取全部内容最简单content, err : os.ReadFile(test.txt) if err ! nil { log.Fatal(err) } fmt.Println(string(content))优点代码少适合小文件。2. 按字节读取buf : make([]byte, 1024) n, _ : file.Read(buf) fmt.Println(读取字节数, n) fmt.Println(内容, string(buf[:n]))3. 按行读取最常用适合大文件使用bufio.Scanner按行读取file, _ : os.Open(test.txt) defer file.Close() scanner : bufio.NewScanner(file) for scanner.Scan() { line : scanner.Text() fmt.Println(line) }4. 带缓冲读取高效读取大文件reader : bufio.NewReader(file) buf : make([]byte, 1024) reader.Read(buf)四、文件写入操作1. 一次性写入最简单content : Hello Go 文件操作 err : os.WriteFile(test.txt, []byte(content), 0666)特点覆盖原有内容。2. 追加写入必须使用OpenFile并指定追加模式file, err : os.OpenFile(test.txt, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0666) defer file.Close() file.WriteString(我是追加的内容\n)3. 缓冲写入高效写入writer : bufio.NewWriter(file) writer.WriteString(使用缓冲写入\n) writer.Flush() // 必须刷新才会真正写入文件五、文件常用操作1. 判断文件是否存在_, err : os.Stat(test.txt) if os.IsNotExist(err) { fmt.Println(文件不存在) } else { fmt.Println(文件存在) }2. 删除文件err : os.Remove(test.txt)3. 获取文件信息info, _ : os.Stat(test.txt) fmt.Println(文件名, info.Name()) fmt.Println(文件大小, info.Size()) fmt.Println(是否是目录, info.IsDir()) fmt.Println(修改时间, info.ModTime())4. 创建目录os.Mkdir(test, 0777) // 创建单个目录 os.MkdirAll(a/b/c, 0777) // 递归创建多级目录5. 遍历目录files, _ : os.ReadDir(.) for _, file : range files { fmt.Println(file.Name()) }六、文件复制src, _ : os.Open(src.txt) dst, _ : os.Create(dst.txt) defer src.Close() defer dst.Close() io.Copy(dst, src)七、文件操作易错点总结打开文件必须判断错误否则文件不存在会崩溃必须 defer file.Close ()关闭文件缓冲写入必须调用Flush()追加写入必须使用os.O_APPEND模式小文件用ReadFile/WriteFile大文件用bufio跨平台路径使用filepath.Join()八、完整示例读写小文件package main import os func main() { // 写入 os.WriteFile(test.txt, []byte(Go语言文件操作), 0666) // 读取 content, _ : os.ReadFile(test.txt) println(string(content)) }

更多文章