Go语言文件的写入、追加、读取、复制操作
2023-06-13 09:19:41 时间
Go语言的 os 包下有一个 OpenFile 函数,其原型如下所示:
func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
其中 name 是文件的文件名,如果不是在当前路径下运行需要加上具体路径;flag 是文件的处理参数,为 int 类型,根据系统的不同具体值可能有所不同,但是作用是相同的。
下面列举了一些常用的 flag 文件处理参数:
- O_RDONLY:只读模式打开文件;
- O_WRONLY:只写模式打开文件;
- O_RDWR:读写模式打开文件;
- O_APPEND:写操作时将数据附加到文件尾部(追加);
- O_CREATE:如果不存在将创建一个新文件;
- O_EXCL:和 O_CREATE 配合使用,文件必须不存在,否则返回一个错误;
- O_SYNC:当进行一系列写操作时,每次都要等待上次的 I/O 操作完成再进行;
- O_TRUNC:如果可能,在打开时清空文件。
【示例 1】:创建一个新文件 golang.txt,并在其中写入 5 句“http://c.biancheng.net/golang/”。
package main import ( "bufio" "fmt" "os" ) func main() { //创建一个新文件,写入内容 5 句 “http://c.biancheng.net/golang/” filePath := "e:/code/golang.txt" file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0666) if err != nil { fmt.Println("文件打开失败", err) } //及时关闭file句柄 defer file.Close() //写入文件时,使用带缓存的 *Writer write := bufio.NewWriter(file) for i := 0; i < 5; i++ { write.WriteString("http://c.biancheng.net/golang/ /n") } //Flush将缓存的文件真正写入到文件中 write.Flush() }
执行成功之后会在指定目录下生成一个 golang.txt 文件,打开该文件如下图所示:
【示例 2】:打开一个存在的文件,在原来的内容追加内容“C语言中文网”
package main import ( "bufio" "fmt" "os" ) func main() { filePath := "e:/code/golang.txt" file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_APPEND, 0666) if err != nil { fmt.Println("文件打开失败", err) } //及时关闭file句柄 defer file.Close() //写入文件时,使用带缓存的 *Writer write := bufio.NewWriter(file) for i := 0; i < 5; i++ { write.WriteString("C语言中文网 /r/n") } //Flush将缓存的文件真正写入到文件中 write.Flush() }
执行成功之后,打开 golang.txt 文件发现内容追加成功,如下图所示:
【示例 3】:打开一个存在的文件,将原来的内容读出来,显示在终端,并且追加 5 句“Hello,C语言中文网”。
package main import ( "bufio" "fmt" "io" "os" ) func main() { filePath := "e:/code/golang.txt" file, err := os.OpenFile(filePath, os.O_RDWR|os.O_APPEND, 0666) if err != nil { fmt.Println("文件打开失败", err) } //及时关闭file句柄 defer file.Close() //读原来文件的内容,并且显示在终端 reader := bufio.NewReader(file) for { str, err := reader.ReadString('/n') if err == io.EOF { break } fmt.Print(str) } //写入文件时,使用带缓存的 *Writer write := bufio.NewWriter(file) for i := 0; i < 5; i++ { write.WriteString("Hello,C语言中文网。 /r/n") } //Flush将缓存的文件真正写入到文件中 write.Flush() }
执行成功之后,会在控制台打印出文件的内容,并在文件中追加指定的内容,如下图所示:
【示例 4】:编写一个程序,将一个文件的内容复制到另外一个文件(注:这两个文件都已存在)
package main import ( "fmt" "io/ioutil" ) func main() { file1Path := "e:/code/golang.txt" file2Path := "e:/code/other.txt" data, err := ioutil.ReadFile(file1Path) if err != nil { fmt.Printf("文件打开失败=%v/n", err) return } err = ioutil.WriteFile(file2Path, data, 0666) if err != nil { fmt.Printf("文件打开失败=%v/n", err) } }
执行成功后,发现内容已经复制成功,如下图所示:
相关文章
- 【愚公系列】2022年08月 Go教学课程 039-文件操作
- 2023-03-07:x264的视频编码器,不用ffmpeg,用libx264.dll也行。请用go语言调用libx264.dll,将yuv文件编码成h264文
- 文件+内存二级缓存在Go项目中的实现及应用
- 2023-02-25:请用go语言调用ffmpeg,解码mp4文件并保存为YUV420SP格式文件,YUV420P不要转换成YUV420SP。
- Go-包管理-go build(一)
- Go-包管理-go install
- Go基础–终端操作和文件操作详解编程语言
- 以Go语言操作MySQL:轻松运行数据库各种查询(go语言mysql)
- 使用Go语言实现Redis数据库(用go实现redis)
- 请求简单而快速用Go编写的Redis请求测试(用go写的redis)
- Go语言快速安装Oracle数据库(go语言安装oracle)
- 程序Go语言调用Oracle数据库驱动程序指南(go oracle驱动)
- Go语句让Oracle数据库管理更方便(oracle go语句)