package main
import (
"bufio"
"fmt"
"io"
"io/ioutil"
"os"
)
func main() {
//只读方式打开文件
file ,err := os.Open("./main.go")
if err != nil {
fmt.Println(err)//打开文件失败
return
}
defer file.Close() //操作完成之后关闭文件流
fmt.Println(file)
//读取文件内容 --方法一
var strSilce []byte
var tempSilce = make([]byte,128) //每次读取128个字节
for {
n,err := file.Read(tempSilce) //返回读取的字节数 读取的内容放在tempSilce切片中
if err == io.EOF{ //表示读取完毕
fmt.Println("读取完成")
break
}
if err != nil{
fmt.Println(err) //读取文件失败
return
}
fmt.Println(n)
strSilce = append(strSilce,tempSilce[:n]...) //tempSilce[:n] 读取了多少个字节 就拿切片里面多少个字节 (考虑场景最后有不足字节的情况)
}
fmt.Println(string(strSilce)) //切片转字符串
//读取文件内容 --方法二(bufio)
var fileStr string
reader := bufio.NewReader(file)
for {
str ,err := reader.ReadString('\n') //\n为分隔符 表示一次读取一行
if err == io.EOF{
fileStr += str //读取完成 可能还有返回值
fmt.Println("读取完成")
break
}
if err != nil {
fmt.Println(err)
}
fileStr += str
}
fmt.Println(fileStr)
//读取文件内容 --方法三(ioutil) 不需要os.open (其他两种都是以文件流的形式读取 这个不是)
byteStr,err := ioutil.ReadFile("./main.go")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(byteStr))
}