go基础-16.文件操作

news/2024/9/24 11:15:10

文件读取

一次性读取

byteData, _ := os.ReadFile("go_study/hello.txt")
fmt.Println(string(byteData))

获取当前go文件的路径

可以通过获取当前go文件的路径,然后用相对于当前go文件的路径去打开文件

// GetCurrentFilePath 获取当前文件路径
func GetCurrentFilePath() string {_, file, _, _ := runtime.Caller(1)return file
}

分片读

file, _ := os.Open("go_study/hello.txt")
defer file.Close()
for {buf := make([]byte, 1)_, err := file.Read(buf)if err == io.EOF {break}fmt.Printf("%s", buf)
}

带缓冲读

按行读

file, _ := os.Open("go_study/hello.txt")
buf := bufio.NewReader(file)
for {line, _, err := buf.ReadLine()fmt.Println(string(line))if err != nil {break}
}

指定分割符

file, _ := os.Open("go_study/hello.txt")
scanner := bufio.NewScanner(file)
scanner.Split(bufio.ScanWords) // 按照单词读
//scanner.Split(bufio.ScanLines) // 按照行读
//scanner.Split(bufio.ScanRunes) // 按照中文字符读
//scanner.Split(bufio.ScanBytes) // 按照字节读读,中文会乱码for scanner.Scan() {fmt.Println(scanner.Text())
}

文件写入

一次性写

err := os.WriteFile("go_study/file1.txt", []byte("这是内容"), os.ModePerm)
fmt.Println(err)

文件的打开方式

常见的一些打开模式

// 如果文件不存在就创建
os.O_CREATE|os.O_WRONLY
// 追加写
os.O_APPEND|os.O_WRONLY
// 可读可写
os.O_RDWR

完整的模式

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);

文件复制

io.Copy(dst Writer, src Reader) (written int64, err error)

将src文件的内容复制到dst文件

read, _ := os.Open("go_study/file1.txt")
write, _ := os.Create("go_study/file3.txt") // 默认是 可读可写,不存在就创建,清空文件
n, err := io.Copy(write, read)
fmt.Println(n, err)

目录操作

dir, _ := os.ReadDir("go_study")
for _, entry := range dir {info, _ := entry.Info()fmt.Println(entry.Name(), info.Size()) // 文件名,文件大小,单位比特
}

参考文档

文件打开模式 https://zhuanlan.zhihu.com/p/602074026

go文件权限 https://blog.csdn.net/qq_35844043/article/details/129380567

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/64099.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode 445. 两数相加 II

1.题目基本信息 1.1.题目描述 给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。 1.2.题目地址 https://leetcode.cn/problems/add…

Windows命令:时间延迟命令

延迟一段时间再执行下一条命令”。 一、利用ping实现延迟命令 这种延时手段是不精确的,因为每一次ping通的延迟不一样。 1、示例chcp 65001 @echo off echo 延时前:%time% ping /n 3 127.0.0.1 >nul echo 延时后:%time% pause 参数/n表示ping通的次数。127.0.0.1是本机ip…

电力施工作业绝缘手套识别系统

电力施工作业绝缘手套识别系统对电力作业人员在电力设备上进行施工作业时是否佩戴绝缘手套进行识别分析,当电力施工作业绝缘手套识别系统检测到作业人员未佩戴绝缘手套时立即抓拍存档同步回传给后台监控人员,提醒相关人员及时制止,及时规避更危险的触电事故发生。电力施工作…

sicp每日一题[2.24-2.27]

2.24-2.26没什么代码量,所以跟 2.27 一起发吧。Exercise 2.24Suppose we evaluate the expression (list 1 (list 2 (list 3 4))). Give the result printed by the interpreter, the corresponding box-and-pointer structure, and the interpretation of this as a tree (as…

ansible-cmdb简单使用

1、安装 官方:https://ansible-cmdb.readthedocs.io/en/latest/ wget https://github.com/fboender/ansible-cmdb/releases/download/1.27/ansible-cmdb-1.27-2.noarch.rpm yum -y install ./ansible-cmdb-1.27-2.noarch.rpm2、使用 首先,为你的主机生成 Asible 输出: mkdir…

ToEasy利用99元阿里云服务器内网穿透的实操过程

一、准备工作: 1、阿里云99元服务器(安装Windows)或者其他windows云服务器 2、frp内网穿透软件 3、数据库MSSQL 2014绿色版 4、ToEasy服务器和客户端软件 二、内网穿透设置 解压frp软件后,打开配置文件frps.toml和frpc.toml进行设置。 1、服务端(frps.toml)#bindAddr = &…

PARTIV-Oracle数据库存储结构-逻辑存储结构

12.逻辑存储结构 12.1. 逻辑存储结构简介 Oracle数据库为数据库中的所有数据分配逻辑空间。数据库空间分配的逻辑单位是数据块、区间、段和表空间。在物理层面,数据存储在磁盘上的数据文件中(见第11章“物理存储结构”)。数据文件中的数据存储在操作系统块中。图12-1是物理和…

MySQL性能优化

性能调优 MySQL调优的五个维度 对于MySQL的性能优化,其实也可以从多个维度出发,共计优化项如下:①客户端与连接层的优化:调整客户端DB连接池的参数和DB连接层的参数。 ②MySQL结构的优化:合理的设计库表结构,表中字段根据业务选择合适的数据类型、索引。 ③MySQL参数优化…