golang读取文件的方法
1. 读取整个文件
- 直接读取
- os.ReadFile()
- ioutil.ReadFile()
在go 1.16 之后ioutil.ReadFile 就等价于 os.ReadFile,所以推荐用os.ReadFile
package main
import (
"fmt"
"os"
)
func main() {
content, err := os.ReadFile("a.txt")
if err != nil {
panic(err)
}
fmt.Println(string(content))
}
- 先打开再读取
package main
import (
"os"
"io/ioutil"
"fmt"
)
func main() {
file, err := os.Open("a.txt")
if err != nil {
panic(err)
}
defer file.Close()
content, err := ioutil.ReadAll(file)
fmt.Println(string(content))
}
2.按行读取
- bufio.ReadLine()
- bufio.ReadBytes(’\n’)
- bufio.ReadString(’\n’)
bufio.ReadLine是低级库不推荐,用另两个
- bufio.ReadBytes
这种方法返回的是[]byte
package main
import (
"bufio"
"fmt"
"io"
"os"
"strings"
)
func main() {
// 创建句柄
fi, err := os.Open("christmas_apple.py")
if err != nil {
panic(err)
}
// 创建 Reader
r := bufio.NewReader(fi)
for {
lineBytes, err := r.ReadBytes('\n')
line := strings.TrimSpace(string(lineBytes))
if err != nil && err != io.EOF {
panic(err)
}
if err == io.EOF {
break
}
fmt.Println(line)
}
}
- bufio.ReadString
这种方法返回的是string
package main
import (
"bufio"
"fmt"
"io"
"os"
"strings"
)
func main() {
// 创建句柄
fi, err := os.Open("a.txt")
if err != nil {
panic(err)
}
// 创建 Reader
r := bufio.NewReader(fi)
for {
line, err := r.ReadString('\n')
line = strings.TrimSpace(line)
if err != nil && err != io.EOF {
panic(err)
}
if err == io.EOF {
break
}
fmt.Println(line)
}
}
3. 按字节读取
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
// 创建句柄
fi, err := os.Open("a.txt")
if err != nil {
panic(err)
}
// 创建 Reader
r := bufio.NewReader(fi)
// 每次读取 1024 个字节
buf := make([]byte, 1024)
for {
n, err := r.Read(buf)
if err != nil && err != io.EOF {
panic(err)
}
if n == 0 {
break
}
fmt.Println(string(buf[:n]))
}
}