Go 语言的文件操作
本文主要介绍 Go 语言中对文件系统的操作,Go 语言内置库中提供了丰富的文件操作函数,所以本文主要介绍使用Go 语言中的内置包——“os” 来实现文件操作。
1. 文件创建/打开
若你想创建/打开一个文件,则可以使用
代码块
- 1
func OpenFile(name string, flag int, perm uint32) (file *File, err Error)
参数解释:
- name:就是文件名,若文件不在执行程序目录下,则可以使用文件的相对路径或者绝对路径。
- flag:是文件打开模式,其支持模式共有(O_RDONLY|O_WRONLY|O_RDWR三个中必须要选一个):
-
- O_RDONLY:以只读方式打开文件;
- O_WRONLY:以只写方式打开文件;
- O_RDWR:以读写方式打开文件;
- O_APPEND:写入时将数据追加到文件;
- O_CREATE:如果不存在新文件,则创建一个新文件;
- O_EXCL:与O_CREATE一起使用,文件不能存在;
- O_SYNC:为同步I/O打开;
- O_TRUNC:打开时截断常规可写文件;
- perm:文件权限,一般最高为0777。
代码示例
代码块
- 1
package main
- 2
- 3
import (
- 4
"fmt"
- 5
"os"
- 6
)
- 7
- 8
func main() {
- 9
f, err := os.OpenFile("a.txt", os.O_RDWR|os.O_CREATE, 0777)
- 10
if err != nil {
- 11
panic(err)
- 12
}
- 13
fmt.Println(f.Name())
- 14
}
- 第 9 行:以读写的方式打开一个名为a.txt的文件,若文件不存在则创建这个文件,文件权限为0777;
- 第 13 行:打印这个文件名;
执行结果:
2. 文件读取
文件打开之后,就可以从得到的文件对象中读取文件内容。我们在 a.txt 文件中输入 file test
字符串,来验证读取结果。
代码示例:
代码块
- 1
package main
- 2
- 3
import (
- 4
"fmt"
- 5
"os"
- 6
)
- 7
- 8
func main() {
- 9
f, err := os.OpenFile("a.txt", os.O_RDWR|os.O_CREATE, 0777)
- 10
if err != nil {
- 11
panic(err)
- 12
}
- 13
b := make([]byte, 10) //最大读取字符数量
- 14
i, err := f.Read(b)
- 15
if err != nil {
- 16
panic(err)
- 17
}
- 18
fmt.Println(i) //输出读取的字符串的个数
- 19
fmt.Println(string(b)) //输出读取到的字符串
- 20
}
执行结果:
3. 文件写入
文件写入有两种模式,追加模式和覆写模式。如果在打开文件的时候加上了 O_APPEND 模式,就是追加,如果不加就是覆写。
代码示例:
代码块
- 1
package main
- 2
- 3
import (
- 4
"os"
- 5
)
- 6
- 7
func main() {
- 8
f1, err := os.OpenFile("a.txt", os.O_RDWR|os.O_CREATE, 0777)
- 9
if err != nil {
- 10
panic(err)
- 11
}
- 12
f1.WriteString("覆写字符")
- 13
f1.Close()
- 14
- 15
f2, err := os.OpenFile("b.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0777)//追加模式打开文件
- 16
if err != nil {
- 17
panic(err)
- 18
}
- 19
f2.WriteString("追加字符")
- 20
}
反复执行几遍上述代码,然后打开两个文件,文件内容如下:
覆写的文件中只有"覆写字符"这四个字,因为其写入被不断覆写了。
追加的文件中有很多"追加字符",因为其写入是不断的被追加到文件末尾的。
4. 小结
本文主要介绍了 Go 语言中自带的 os 包的文件操作,需要注意的是文件的打开中若不确定文件是否存在,就可以加上 O_CREATE。改写文件若是需要追加到文件末尾,记得在打开文件的时候要加上 O_APPEND。
上一节
文章来源于网络,侵删!