前言
Go语言的文件读写学习笔记
引入模块
1 2 3 4 5
| import ( os io bufio )
|
打开文件
<src>
:文件路径,如果文件不存在会报错
1
| file, err := os.open("<src>")
|
打开方式和权限控制
<src>
:文件路径,如果文件不存在会报错
<mode>
:打开的模式,多种模式同时指定时可以使用|
隔开
os.O_RDONLY
:只读模式打开文件
os.O_WRONLY
:只写模式打开文件
os.O_RDWR
:读写模式打开文件
os.O_APPEND
:追加写入
os.O_CREATE
:如果文件不存在就创建一个新文件
os.O_EXCL
:文件不存在就会报错
os.O_SYNC
:打开文件用于异步I/O
os.O_TRLNC
:打开文件时立即清空文件内容
<jurisdiction>
:权限控制,只在类Unix操作系统下有效
1
| file, err := os.open("<src>", <mode>, <jurisdiction>)
|
关闭文件
在函数执行结束之前再执行
读文件(带缓冲区的Reader)
创建一个Reader
1 2 3 4 5 6 7 8 9 10 11 12
| reader := bufio.NewReader(file)
for { line, err := reader.ReaderString('\n') if err == io.EOF { break } fmt.Print(line) }
|
读文件(不带缓冲区一次性读取全部文件)
- 适合读取小文件
- 返回一个
[]byte
- 因为
ioutil.ReadFile()
没有显式的Open()
打开文件,所以也不需要显式的Close()
关闭文件,因为Close()
已经被封装
1 2
| content, err := ioutil.ReadFile("<src>") fmt.Println(string(content))
|
写文件(带缓冲区的Writer)
\r\n
:Windows系统下需要通过\r\n
定义换行符
\n
:类Unix系统下只需要通过\n
定义换行符
如果没有文件就创建新文件
1 2 3 4 5 6 7 8 9
| file, err := os.open("<src>", os.O_WRONLY | os.O_CREATE, 0766)
writer := bufio.NewWriter(file)
writer.WriterString("写入字符串\r\n")
writer.Flush()
|
写入之前清空文件内容
1 2 3 4 5 6 7 8 9
| file, err := os.open("<src>", os.O_WRONLY | os.O_TRUNC, 0766)
writer := bufio.NewWriter(file)
writer.WriterString("写入字符串\r\n")
writer.Flush()
|
追加写入
1 2 3 4 5 6 7 8 9
| file, err := os.open("<src>", os.O_WRONLY | os.O_APPEND, 0766)
writer := bufio.NewWriter(file)
writer.WriterString("写入字符串\r\n")
writer.Flush()
|
完成
参考文献
哔哩哔哩——尚硅谷