Golang 读取文件的方式
程序中经常会出现文件的的读写操作,当然读取文件也有很多的方式;如:
- 一次性读取文件的全部内容
- 一次读取一行内容
- 按字节读取
下面是几种 Golang 读取文件的方式,代码如下所示
一次性读取文件的全部内容到内存
func main() {
filename := flag.String("f", "", "Specify the file name")
flag.Parse()
if filename == nil || len(*filename) == 0 {
flag.Usage()
os.Exit(1)
}
contents, err := ioutil.ReadFile(*filename)
if err != nil {
log.Printf("Failed to read file %s,err:%s", *filename, err.Error())
os.Exit(1)
}
fmt.Println(string(contents))
}
一次只读取一行
func main() {
filename := flag.String("f", "", "Specify the file name")
flag.Parse()
if filename == nil || len(*filename) == 0 {
flag.Usage()
os.Exit(1)
}
f,err := os.Open(*filename)
if err != nil{
log.Printf("Failed to open file %s,err:%s",*filename,err.Error())
os.Exit(1)
}
defer f.Close()
buf := bufio.NewReader(f)
for {
line,err := buf.ReadBytes('\n')
log.Print(string(line))
if err != nil{
if err == io.EOF{
log.Println("end of file")
break
}else {
log.Printf("read file err:%s",err.Error())
break
}
}
}
}
按字节读取文件内容
func main() {
filename := flag.String("f", "", "Specify the file name")
flag.Parse()
if filename == nil || len(*filename) == 0 {
flag.Usage()
os.Exit(1)
}
f, err := os.Open(*filename)
if err != nil {
log.Printf("Failed to read file %s,err:%s", *filename, err.Error())
os.Exit(1)
}
//指定一次读取的文件大小
buf := make([]byte, 64)
for {
n, err := f.Read(buf)
if err != nil && err != io.EOF {
log.Printf("Failed to read,err:%s", err.Error())
break
}
if n == 0 {
break
}
fmt.Print(string(buf[:n]))
}
}