文件相对路径
如果想要使用文件相对路径,可以先利用os.Getwd()
方法获取当前工作路径。
// 获取当前文件路径
func Path1() {
str, _ := os.Getwd()
fmt.Println(str)
}
获取到当前项目的工作路径后,就可以通过工作路径书写文件相对路径了。
例如:我的工作路径是…helloworld,那么下图中的road.go
文件的相对路径就是./exercise/file/read.go
打开关闭文件
方法:func OpenFile(name string, flag int, perm FileMode) (*File, error)
其中:name是文件路径+文件名;flag是打开文件的模式;perm是文件权限。
打开文件的模式flag
有以下几种:若同时想用多种可用|
拼接不同模式
模式 | 含义 |
---|---|
os.O_WRONLY | 只写 |
os.O_CREATE | 如果不存在文件,创建文件 |
os.O_RDONLY | 只读 |
os.O_RDWR | 可读可写 |
os.O_TRUNC | 打开时清空文件原先内容 |
os.O_APPEND | 追加 |
文件权限perm
使用4位8进制数
来表示三种类型用户的权限,首位取0,形式即0XXX
。
第一个X表示的是文件所有者的权限
第二个X表示的是组用户的权限
第三个X表示的是其他用户的权限
每位数字所代表的权限:读r=4,写w=2,可执行x=1
数字 | r | w | x | 权限 |
---|---|---|---|---|
0 | - | - | - | 所有权限均无 |
1 | - | - | x | 可执行 |
2 | - | w | - | 可写 |
3 | - | w | x | 可写,可执行 |
4 | r | - | - | 可读 |
5 | r | - | x | 可读,可执行 |
6 | r | w | - | 可读,可写 |
7 | r | w | x | 可读,可写,可执行 |
常使用的0644
,表示文件所有者可读写,同组用户及其他用户只可读。
简单使用:打开一个不存在的文件,设置模式为自动创建且可写,向文件中写入内容。
// 若没文件自己创建,可写
func Open2() {
file, err := os.OpenFile("./exercise/file/test1.txt", os.O_WRONLY|os.O_CREATE, 0644)
if err != nil {
fmt.Println("open err :", err)
return
}
// 关闭文件
defer file.Close()
_, err2 := file.Write([]byte("hello lena,i create"))
if err2 != nil {
fmt.Println("write err :",err)
return
}
}
结果如下:由于原先没有文件,因此自己创建了文件,同时写入了内容。
注意:打开文件后记得关闭文件!若文件只在当前方法体内存在,可以在打开了文件后就使用defer
关闭文件,会在方法结束执行。
读文件
file.Read:按字节读取
/**
按字节读取
使用Read方法读取:func (f *File) Read(b []byte) (n int, err error).
注意:一次Read读取出的字节数与[]byte的大小有关
*/
func Read1() {
// 若使用相对路径,可以使用os.Getwd()获取当前路径
file, err := os.Open("./exercise/file/read.go") // (*File, error)
// 打开文件过程中是否报错
if err != nil {
// 如果没有报错,则err为<nil>
fmt