golang 文件读取

golang文件读取3种方式

  • 1.按行读取
  • 2.读取整个内容
  • 3.分段读取

打开文件

打开文件使用os模块,使用os.Open(文件路径)

1
os.Open("./xx.txt")

参考实例

1
fileObj,err := os.Open("./test.txt") //相对目录打开文件

按行读取文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package main

import (
"bufio"
"fmt"
"io"
"os"
)

func main(){
fileObj,err:=os.Open("./xx.txt")

if err !=nil{
fmt.Printf("read file failed,err:%v\n",err)
return
}

defer fileObj.Close() //defer关闭文件
s :=bufio.NewReader(fileObj)

for { //for循环逐行读取文件
reader,err := s.ReadString('\n') //指定文件每行的换行符号

fmt.Print(reader) //打印内容

if err == io.EOF{ //如果是文件结尾会抛EOF错误

break
}

}

}

读取整个文件

使用ioutil来读取整个文件内容,如果文件过大则不建议使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import (
"fmt"
"io/ioutil"
)

func main(){
content,err:=ioutil.ReadFile("./xx.txt")
if err !=nil{
fmt.Printf("read file failed, err:%v\n", err)
return
}
fmt.Print(string(content)) //将内容转成string输出
}

分块读取文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package main

import (
"fmt"
"io"
"os"
)

func main(){

fileObj,err := os.Open("./xx.txt") //相对目录打开文件

if err != nil{
fmt.Printf("open file failed,err:%v\n",err)
return
}

defer fileObj.Close() //关闭文件

for {

var tmp = make([]byte,128) //按字节数读取文件内容
n,err:=fileObj.Read(tmp)

if err == io.EOF{
fmt.Print(string(tmp[:n]))
return
}

if err != nil{
fmt.Printf("read from file failed, err:%v\n",err)
}

fmt.Print(string(tmp))
}

}