1 一次性读取文件的所有内容
1.1 根据文件名直接读取
函数:func ReadFile(name string) ([]byte, error)
示例:
func Test1 (t *testing.T) {
content, err := os.ReadFile("message.txt")
if err != nil {
fmt.Println(err)
}
fmt.Println(string(content))
}
1.2 创建句柄后再读取
函数:func (f *File) Read(b []byte) (n int, err error)
示例:
func Test2(t *testing.T) {
file, err := os.Open(`message.txt`)
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
buff := make([]byte, 1024)
n, err := file.Read(buff)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(buff[:n]))
}
2 根据分隔符读取
2.1 使用Reader进行读取,注意此种方法包含分隔符
2.1.1 ReadString方法
函数:func (b *Reader) ReadString(delim byte) (string, error)
示例:
func Test3(t *testing.T) {
file, err := os.Open(`message.txt`)
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
reader := bufio.NewReader(file)
for {
if s, err := reader.ReadString('\n'); err == nil {
fmt.Print(s)
} else if err.Error() == "EOF" {
fmt.Print(s)
break
} else {
fmt.Println(err)
break
}
}
}
2.1.2 ReadBytes方法
函数:func (b *Reader) ReadBytes(delim byte) ([]byte, error)
示例:
func Test4(t *testing.T) {
file, err := os.Open(`message.txt`)
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
reader := bufio.NewReader(file)
for {
if bytes, err := reader.ReadBytes('\n'); err == nil {
fmt.Print(string(bytes))
} else if err.Error() == "EOF" {
fmt.Print(string(bytes))
break
} else {
fmt.Println(err)
break
}
}
}
2.2 使用Scanner进行读取,注意此种方法不会包含分隔符
函数:func (s *Scanner) Scan() bool
示例:
func Test5(t *testing.T) {
file, err := os.Open(`message.txt`)
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
scanner := bufio.NewScanner(file)
scanner.Split(bufio.ScanWords)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}