开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:创建文件并写入内】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/626/detail/9729
创建文件并写入内容
内容介绍
一、基本介绍
二、基本应用实例
三、基本应用实例-方式一(1)
一、基本介绍
首先要用到 fuc OpenFile,它是在os包里的文件。
说明: os.0penFile 是一个更一般性的文件打开函数,它会使用指定的选项(如O_RDONLY 等)、指定的模式(如0666等)打开指定名称的文件。如果操作成功,返回的文件对象可用于1/O。如果出错,错误底层类型是*PathErroro。
这个函数有以下三个参数:
1.name string。要把文件的内容写入,是文件的路径。
2.flag int, 代表打开文件的方式,可以组合。一共有以下几种方式。
const
O_RRONLY int = syscall.O_RDONLY
//只读模式打开文件
O_WRONLYint = syscall.0_WRONLY
//只写模式打开文件
O_RDWR int = syscall.0_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/0
O_TRUNC int = syscall.0_TRUNC
//如果可能,打开时清空文件
3. perm FileMode
权限控制(linux)
打开 type filemode,准确的讲,它以是的方式打开,有三个占位符。
第一个代表文件所有者的权限,第二个代表其他组,文件所在组的对文件所有的权限,还有一个是其他组所在用户的权限。
r 是用4表示的
W 是用2表示的
x 是用1表示的
在 windows 下是无用的,详情:参考尚硅谷-linux 课程。就看其中一个章节即可。
FileMode 可以指定文件是用什么权限进行控制的。文件会返回两个参数:
1. file *File, 文件指针,也就是文件句柄。
2. err error),如果打开错误,会返回一个 error 值。
二、基本应用实例
1.创建一个新文件,写入内容5句"hello,Gardon"。此时写的采用的是带缓存的reader,这个 writer 可以通过带缓存,来完成带缓存的内容。
2.打开一个存在的文件中,将原来的内容覆盖成新的内容10句“你好,尚硅谷!”中
3.打开一个存在的文件,在原来的内容追加内容'ABC!ENGLISH!'
4.打开一个存在的文件,将原来的内容读出显示在终端,并且追加5句"hello,北京!”
使用os.OpenFile(), bufio.NewWriter(),
*Writer 的方法 WriteString 完成上面的任务.
三、基本应用实例-方式一(1)
第一种方式的代码实现:
新建一个文件夹
package main
import(
"fmt”
"bufio"
"os"
func main()(
//创建一个新文件,写入内容5句“hello, Gardon”
//1.打开文件 d:/abc.txt
filePath :=“d:/abc.txt"
file,err := os.OpenFile(filePath, O_WRONLY O_CREATE,0666)
if err != nil t
fmt.Printf("open file err=%v\n", err)
return
打开成功后,
//及时关闭 file 句柄
defer file.Close()
//准备写入5句“hello, Gardon"
str :="hello,Gardon\n"
//\n 表示换行
//写入时,使用带缓存的 *Writer
writer := bufio.NewWriter(file)
for i:= 0;i< 5; i++ 【
writer.Writerstring(str)
//因为 writer 是带缓存,因此因此在调用 Writerstring 方法时,其实//内容是先写入到缓存的
打开 writer 的源代码,
type Writer struct
err error
buf []byte
n int
Wr io. Writer
可以看出 writer 结构体中,先把内容写到 buf 里,然后搜索 flush,
//Flush writes any buffered data to the underlying io. Writer.
func(b*Writer)Flush()error
可以看出 flush 的作用,只有通过 flush,才能真正的将它写入到文件里去。
//因为 writer 是带缓存,因此在调用 Writerstring 方法时, 其实
//内容是先写入到缓存的,所以需要调用 Flush 方法, 将缓冲的数据
//真正写入到文件中, 否则文件中会没有数据!!!writer . Flush()
修改问题,并运行,查看是否写入。此时写入成功。