### 文件读取
> func (f *File) Read(b []byte) (n int, err error)
> Read(b []byte)
> b []byte 文件字节组成的切片
>
Read方法从文件中读取最多len(b)字节数据并写人byte数组b,它返回读取的字节数和可能遇到的任何错误。文件终止标志是读取0个字节且返回值err为io.EOF。
```
package main
import (
"fmt"
"os"
)
func mode(path string) {
//读取文件内容
file, err := os.Open(path)
if err != nil {
fmt.Println(err)
}
// 创建 byte 的slice(切片)用于接收文件读取数据
buf := make([]byte, 1024)
// 循环读取
for {
// Read函数会改变文件当前偏移量
len, _ := file.Read(buf)
// 读取字节为0时,跳出循环
if len == 0 {
break
}
fmt.Println(string(buf))
}
// 关闭文件
file.Close()
}
// 读取999.txt 文件内容
func main() {
// 路径
mode("E:\\flie\\999.txt")
}
```
当文件较大时使用ReadAt接口
> func (f *File) ReadAt(b []byte, off int64) (n int, err error)
> ReadAt(b []byte, off int64)
> b []byte 文件字节组成的切片
> off int64 偏移字节
ReadAt从指定的位置(相对于文件开始位置)读取len(b)字节数据并写入byte数组b。它返回读取的字节数和可能遇到的任何错误。当n<len(b)时,本方法总是会返回错误;如果是因为到达文件结尾,返回值err会是io.EOF。
```
package main
import (
"fmt"
"os"
)
func mode(path string) {
//读取文件内容
file, err := os.Open(path)
if err != nil {
fmt.Println(err)
}
// 创建 byte 的slice(切片)用于接收文件读取数据
buf := make([]byte, 1024)
// ReadAt函数会改变文件当前偏移量
// ReadAt读取偏移9字节的内容
_, _ = file.ReadAt(buf, 9)
// file.ReadAt(buf, 9)
fmt.Println(string(buf))
// 关闭文件
_ = file.Close()
// file.Close()
}
// 读取999.txt 文件内容
func main() {
// 路径
mode("E:\\flie\\999.txt")
}
```
- 安装开发环境
- 安装开发环境
- 安装详细教程
- 引入包
- Go语言基础
- 基本变量与数据类型
- 变量
- 数据类型
- 指针
- 字符串
- 代码总结
- 常量与运算符
- 常量
- 运算符
- 流程控制
- if判断
- for循环
- switch分支
- goto跳转
- 斐波那契数列
- Go语言内置容器
- 数组
- 切片
- 映射
- 函数
- 函数(上)
- 函数(中)
- 函数(下)
- 小节
- 包管理
- 结构体
- 结构体(上)
- 结构体(中)
- 结构体(下)
- 小节
- 错误处理
- 错误处理
- 宕机
- 错误应用
- 小节
- 文件操作
- 获取目录
- 创建和删除目录
- 文件基本操作(上)
- 文件基本操作(中)
- 文件基本操作(下)
- 处理JSON文件
- 接口与类型
- 接口的创建与实现
- 接口赋值
- 接口嵌入
- 空接口
- 类型断言(1)
- 类型断言(2)
- 小节
- 并发与通道
- goroutine协程
- runtime包
- 通道channel
- 单向通道channel
- select
- 线程同步
- 多线程的深入学习
- http编程
- http简介
- Client和Request
- get请求
- post请求
- 模块函数方法
- 模块
- fmt库,模块
- 项目练习
- 爬虫:高三网
- 爬虫:快代理
- 爬虫:快代理2
- 多线程:通道思路
- 多线程爬虫:快代理