1、创建一个新文件,并往里面写入5个 hello, Golang
准备
package os
func OpenFile(name string, flag int, perm FileMode) (file File, err error)
OpenFile是一个更一般性的文件打开函数,大多数调用者都应用Open或Create代替本函数。它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。如果操作成功,返回的文件对象可用于I/O。如果出错,错误底层类型是PathError。
// package os// Constantsconst (O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件O_RDWR int = syscall.O_RDWR // 读写模式打开文件O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部O_CREATE int = syscall.O_CREAT // 如果不存在将创建一个新文件O_EXCL int = syscall.O_EXCL // 和O_CREATE配合使用,文件必须不存在O_SYNC int = syscall.O_SYNC // 打开文件用于同步I/OO_TRUNC int = syscall.O_TRUNC // 如果可能,打开时清空文件)// 使用方式(组合模式)os.O_WRONLY | os.O_CREATE
package bufio
func NewWriter(w io.Writer) Writer
NewWriter创建一个具有默认大小缓冲、写入w的Writer。
func (b Writer) *WriteString(s string) (int, error)
WriteString写入一个字符串。返回写入的字节数。如果返回值nn < len(s),还会返回一个错误说明原因。
代码实现
package mainimport ("bufio""fmt""os")func main() {// 创建一个新文件,并往里面写入5个 hello, Golang// 1、打开 d:/abc.txtfilePath := "d:/abc.txt"file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0666)if err != nil {fmt.Println("打开文件失败")return}// 2、写入5个 hello, Golang , 使用带缓存的 *Writestr := "hello, Golang\n"writer := bufio.NewWriter(file)for i := 0; i < 5; i++ {writer.WriteString(str)}// 3、将内容写入磁盘文件// 因为 writer 是带缓存的,因此在调用 WriteString() 时,其实内容是先写入到缓存了,// 因此需要再 Flush 一下,将缓存的数据真正写到文件中,否则文件中会没有数据writer.Flush()// 4、操作完后,及时关闭文件,防止内存泄漏// 操作完后,及时关闭文件,防止内存泄漏defer func() {err = file.Close()if err != nil {fmt.Println("关闭文件错误")}}()}
实现效果
2、打开一个存在的文件,将原来的内容,覆盖成新的内容: “你好,Golang!”
代码实现
在上个案例的基础上,只需要修改 os.OpenFile 的文件打开模式,再重新写入即可
O_TRUNC int = syscall.O_TRUNC // 如果可能,打开时清空文件
// 打开一个存在的文件,将原来的内容,覆盖成新的内容: “你好,Golang!”package mainimport ("bufio""fmt""os")func main() {// 1、打开 d:/abc.txtfilePath := "d:/abc.txt"file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_TRUNC, 0666)if err != nil {fmt.Println("打开文件失败")return}// 2、写入5个 hello, Golang , 使用带缓存的 *Writestr := "你好,Golang!\n"writer := bufio.NewWriter(file)for i := 0; i < 10; i++ {writer.WriteString(str)}// 3、将内容写入磁盘文件// 因为 writer 是带缓存的,因此在调用 WriteString() 时,其实内容是先写入到缓存了,// 因此需要再 Flush 一下,将缓存的数据真正写到文件中,否则文件中会没有数据writer.Flush()// 4、操作完后,及时关闭文件,防止内存泄漏// 操作完后,及时关闭文件,防止内存泄漏defer func() {err = file.Close()if err != nil {fmt.Println("关闭文件错误")}}()}
实现效果
3、打开已存在的文件,在原先内容的基础上,追加 “ABC, ENGLISH!”
代码实现
O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部
// 打开已存在的文件,在原先内容的基础上,追加 “ABC, ENGLISH!”package mainimport ("bufio""fmt""os")func main() {// 1、打开 d:/abc.txtfilePath := "d:/abc.txt"file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_APPEND, 0666)if err != nil {fmt.Println("打开文件失败")return}// 2、写入5个 hello, Golang , 使用带缓存的 *Writestr := "ABC, ENGLISH!\r\n"writer := bufio.NewWriter(file)for i := 0; i < 10; i++ {writer.WriteString(str)}// 3、将内容写入磁盘文件// 因为 writer 是带缓存的,因此在调用 WriteString() 时,其实内容是先写入到缓存了,// 因此需要再 Flush 一下,将缓存的数据真正写到文件中,否则文件中会没有数据writer.Flush()// 4、操作完后,及时关闭文件,防止内存泄漏// 操作完后,及时关闭文件,防止内存泄漏defer func() {err = file.Close()if err != nil {fmt.Println("关闭文件错误")}}()}
实现效果
4、打开已存在的文件,把内容显示到终端,并追加内容 “hello, beijing”
代码实现
// 打开已存在的文件,把内容显示到终端,并追加内容 “hello, beijing”package mainimport ("bufio""fmt""io""os")func main() {// 1、打开 d:/abc.txtfilePath := "d:/abc.txt"file, err := os.OpenFile(filePath, os.O_RDWR|os.O_APPEND, 0666)if err != nil {fmt.Println("打开文件失败")return}// 2、读取内容,并显示在终端reader := bufio.NewReader(file)for {// 读到一个换行就结束str, err := reader.ReadString('\n')if err == io.EOF {// 读到一行末尾break}// 输出内容fmt.Print(str)}// 3、写入5个 hello, Golang , 使用带缓存的 *Writestr := "hello, beijing!\r\n"writer := bufio.NewWriter(file)for i := 0; i < 10; i++ {writer.WriteString(str)}// 4、将内容写入磁盘文件// 因为 writer 是带缓存的,因此在调用 WriteString() 时,其实内容是先写入到缓存了,// 因此需要再 Flush 一下,将缓存的数据真正写到文件中,否则文件中会没有数据writer.Flush()// 5、操作完后,及时关闭文件,防止内存泄漏defer func() {err = file.Close()if err != nil {fmt.Println("关闭文件错误")}}()}
实现效果


