go学习笔记
基础
go 定义变量的几种方式
常量的声明
go基本数据类型
go语言中的流程控制
golang中的数组
切片
golang中的map 详解
golang 函数详解
内置函数 panic/recover
golang time包 以及日志函数
golang中的指针
golang 中的结构体
Golang 结构体 和 json互相转换 序列化 反序列化
Golang 中的 go mod 以及 Golang包 详解
golang 中的接口
golang goroutine channel 实现并发 和 并行
channel
goroutine 互斥锁 读写互斥锁
golang 反射
golang 标准库
io
strconv
工具 + blog
进程 线程 协程
空接口 类型断言
为Go项目编写Makefile
减小 Go 代码编译后的二进制体积
go windows下编译linux可执行文件
本文档使用 MrDoc 发布
-
+
首页
io
## 读取文件 ### 读取文件方式1 file.Read() ``` //只读方式打开当前目录的文件 file, err := os.Open("./test.txt") defer file.Close() // 必须记得关闭文件流 if err != nil { fmt.Println("打开文件报错") return } //操作文件 var fileByte = make([]byte, 264) //声明一个byte slice n, err2 := file.Read(fileByte) if err2 != nil { fmt.Println("读取文件失败") } fmt.Printf("读取文件byte数: %v\n", n) fmt.Println(string(fileByte)) //把byte切片强转成string /* 读取文件byte数: 26 test1 test2 test3 test4 */ ``` ### 读取文件方式2 bufio.NewReader ``` //只读方式打开当前目录的文件 file, err := os.Open("./test.txt") defer file.Close() // 必须记得关闭文件流 if err != nil { fmt.Println("打开文件失败") } //创建reader对象 reader:=bufio.NewReader(file) reader := bufio.NewReader(file) //ReadString 读取文件 line,err := reader.ReadString('\n') for { s, err2 := reader.ReadString('\n') //读取的分割符 if err2 == io.EOF { // 如果 err2 等于 io.EOF 表示文件读取结束 fmt.Println("读取文件结束") } if err2 != nil { fmt.Println("读取文件失败") return } fmt.Print(s) } ``` ### 读取文件方式3 ioutil 读取文件 ``` b, err := ioutil.ReadFile("./test.txt") if err != nil { fmt.Println("文件读取失败") } fmt.Printf("b: %v\n", string(b)) ``` ## 文件写入 ### 写入文件 方法1 ``` var filestr1 string = "时间急急急,世界经济的\n" var filestr2 string = "士大夫卡卡卡卡是" f, err := os.OpenFile("./test1.txt", os.O_CREATE|os.O_RDWR, 0666) if err != nil { fmt.Println("打开文件错误") } f.Write([]byte(filestr1)) //写入byte slice f.WriteString(filestr2) //直接写入 字符串 f.Close() ``` ``` // 只读模式 O_RDONLY int = syscall.O_RDONLY // open the file read-only. // 只写模式 O_WRONLY int = syscall.O_WRONLY // open the file write-only. // 可读可写 O_RDWR int = syscall.O_RDWR // open the file read-write. // The remaining values may be or'ed in to control behavior. // 追加内容 O_APPEND int = syscall.O_APPEND // append data to the file when writing. // 创建文件,如果文件不存在 O_CREATE int = syscall.O_CREAT // create a new file if none exists. // 与创建文件一同使用,文件必须存在 O_EXCL int = syscall.O_EXCL // used with O_CREATE, file must not exist. // 打开一个同步的文件流 O_SYNC int = syscall.O_SYNC // open for synchronous I/O. // 如果可能,打开时缩短文件 O_TRUNC int = syscall.O_TRUNC // truncate regular writable file when opened. ``` ``` // 文件夹模式 ModeDir FileMode = 1 << (32 - 1 - iota) // d: is a directory // 追加模式 ModeAppend // a: append-only // 单独使用 ModeExclusive // l: exclusive use // 临时文件 ModeTemporary // T: temporary file; Plan 9 only // 象征性的关联 ModeSymlink // L: symbolic link // 设备文件 ModeDevice // D: device file // 命名管道 ModeNamedPipe // p: named pipe (FIFO) // Unix 主机 socket ModeSocket // S: Unix domain socket // 设置uid ModeSetuid // u: setuid // 设置gid ModeSetgid // g: setgid // UNIX 字符串设备,当设备模式是设置unix ModeCharDevice // c: Unix character device, when ModeDevice is set // 粘性的 ModeSticky // t: sticky // 非常规文件;对该文件一无所知 ModeIrregular // ?: non-regular file; nothing else is known about this file // bit位遮盖,不变的文件设置为none // Mask for the type bits. For regular files, none will be set. ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice | ModeCharDevice | ModeIrregular // 权限位 ModePerm FileMode = 0777 // Unix permission bits ``` ### 写入文件方法2 bufio 写入文件 ``` var filestr1 string = "时间急急急,世界经济的\n" var filestr2 string = "士大夫卡卡卡卡是" f, _ := os.OpenFile("./test2.txt", os.O_CREATE|os.O_RDWR, 0666) w := bufio.NewWriter(f) //创建 writer 对象 w.WriteString(filestr1) //先将 数据写入缓存 w.WriteString(filestr2) w.Flush() //将缓存中的数据写入文件 f.Close() ``` ### 写入文件方法3 ioutil 写入文件 ``` func main() { var filestr1 string = "时间急急急,世界经济的\n" //var filestr2 string = "士大夫卡卡卡卡是" err := ioutil.WriteFile("./test3.txt", []byte(filestr1), fs.FileMode(os.O_APPEND)) if err != nil { fmt.Println("写入报错") } } ``` ## 文件重命名 ## 复制文件 ### 复制文件方法1 ``` b, _ := ioutil.ReadFile("./test1.txt") ioutil.WriteFile("./test4.txt", []byte(b), fs.FileMode(os.O_CREATE)) ``` ### 复制文件方法2 ## 创建目录 ``` err := os.Mkdir("./test/", 0666) err2 := os.MkdirAll("./test/1/2/3", 0666) fmt.Printf("err: %v\n", err) fmt.Printf("err2: %v\n", err2) ```
admin
2023年3月8日 19:21
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码