Golang 学习笔记10-文件操作

AI-摘要
Yuan GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
Golang 学习笔记10-文件操作
SEAlencehe文件读取
一次性读取
byteData, err := os.ReadFile("study/23.文件操作/hello.txt")
if err != nil {
fmt.Println(err)
}
fmt.Println(string(byteData))
分片读取
一般用来读二进制文件
file, err := os.Open("study/23.文件操作/hello.txt")
if err != nil {
fmt.Println(err)
}
//读完之后关闭协程
defer file.Close()
for {
var byteData = make([]byte, 12)
n, err := file.Read(byteData)
if err == io.EOF {
break
}
fmt.Println(string(byteData), n)
}
fmt.Println(string(byteData[:n]))
带缓冲读
按行
buf := bufio.NewReader(file)
for {
line, _, err := buf.ReadLine()
if err == io.EOF {
break
}
fmt.Println(string(line))
}
}
按分隔符
buf := bufio.NewScanner(file)
//行号
var index int
//指定分割符
buf.Split(bufio.ScanWords)//按照单词
for buf.Scan() {
index++
fmt.Println(index, buf.Text())
}
文件写入
os.OpenFile("文件路径", 打开标志), os.ModePerm)
// 如果文件不存在就创建
os.O_CREATE|os.O_WRONLY
// 追加写
os.O_APPEND|os.O_WRONLY
// 可读可写
os.O_RDWR
file, err := os.OpenFile("study/23.文件操作/w.txt", os.O_CREATE|os.O_WRONLY, 0666)
if err != nil {
panic(err)
}
defer file.Close()
file.Write([]byte("hello world"))
如果现在一样的方法读会报错
file, err := os.OpenFile("study/23.文件操作/w.txt", os.O_CREATE|os.O_WRONLY, 0666)
if err != nil {
panic(err)
}
defer file.Close()
//读文件
byteData, err := os.ReadFile(file)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(byteData))
完整的模式
const (
O_RDONLY int = syscall.O_RDONLY // 只读
O_WRONLY int = syscall.O_WRONLY // 只写
O_RDWR int = syscall.O_RDWR // 读写
O_APPEND int = syscall.O_APPEND // 追加
O_CREATE int = syscall.O_CREAT // 如果不存在就创建
O_EXCL int = syscall.O_EXCL // 文件必须不存在
O_SYNC int = syscall.O_SYNC // 同步打开
O_TRUNC int = syscall.O_TRUNC // 打开时清空文件
)
文件的权限
主要用于linux系统,在windows下这个参数会被无视,代表文件的模式和权限位,
三个占位符
第一个是文件所有者所拥有的权限
第二个是文件所在组对其拥有的权限
第三个占位符是指其他人对文件拥有的权限
根据UNIX系统的权限模型,文件或目录的权限模式由三个数字表示,分别代表 所有者(Owner) 、组(Group) 和 其他用户(Other) 的权限。每个数字由三个比特位组成,分别代表读、写和执行权限。因此,对于一个mode参数值,它的每一个数字都是一个八进制数字,代表三个比特位的权限组合
R:读,Read的缩写,八进制值为 4;
W:写,Write的缩写,八进制值为 2;
X:执行,Execute的缩写,八进制值为 1;
0444 表示三者均为只读的权限;
0666 表示三者均为“读写”的权限;
0777 表示三者均为读写执行的权限;
0764 表示所有者有读写执行(7=4+2+1)的权限,组有读写(6=4+2)的权限,其他用户则为只读(4=4);
一次性写入
os.WriteFile("study/23.文件操作/w.txt", []byte("你好"), 0666)
这个方法会把之前的内容清空
文件复制
srcFile, err := os.Open("study/23.文件操作/hello.txt")
if err != nil {
fmt.Println(err)
return
}
defer srcFile.Close()
wrFile, err := os.OpenFile("study/23.文件操作/w.txt", os.O_CREATE|os.O_WRONLY, 0666)
if err != nil {
fmt.Println(err)
return
}
defer wrFile.Close()
io.Copy(wrFile, srcFile)
目录操作
dir, err := os.ReadDir("study/23.文件操作")
if err != nil {
fmt.Println(err)
panic(err)
}
for _, v := range dir {
info, _ := v.Info()
fmt.Println(v.Name(), v.IsDir(), info.Size()) //文件名 是否是目录 文件大小
}
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果


