1 package main
2
3 import (
4 "fmt"
5 "io"
6 "os"
7 )
8
9 func main() {
10 /*
11 读取数据:
12 Reader接口:
13 Read(p []byte)(n int, error)
14 */
15
16 // step1:打开文件
17 fileName := "D:\\Go\\web2\\aa.txt"
18 file, err := os.Open(fileName)
19 if err != nil {
20 fmt.Println("err:", err)
21 return
22 }
23 // step3:关闭文件
24 defer file.Close()
25
26 // step2:读取数据
27 bs := make([]byte, 4)
28
29 // //第一次读取
30 // n, err := file.Read(bs)
31 // fmt.Println(err) // <nil>
32 // fmt.Println(n) // 4
33 // fmt.Println(bs) // [97 98 99 100]
34 // fmt.Println(string(bs)) // abcd
35
36 // //第二次读取
37 // n, err = file.Read(bs)
38 // fmt.Println(err) // <nil>
39 // fmt.Println(n) // 4
40 // fmt.Println(bs) // [101 102 103 104]
41 // fmt.Println(string(bs)) // efgh
42
43 // //第三次读取
44 // n, err = file.Read(bs)
45 // fmt.Println(err) //<nil>
46 // fmt.Println(n) //2
47 // fmt.Println(bs) //[105 106 103 104]
48 // fmt.Println(string(bs)) //ijgh
49
50 // //第四次读取
51 // n, err = file.Read(bs)
52 // fmt.Println(err) //EOF
53 // fmt.Println(n) //0
54
55 n := -1
56 for {
57 n, err = file.Read(bs)
58 if n == 0 || err == io.EOF {
59 fmt.Println("读取到了文件的末尾,结束读取操作。。")
60 break
61 }
62 fmt.Println(n, string(bs[:n]))
63 // 4 abcd
64 // 4 efgh
65 // 4 ijkl
66 // 4 mnop
67 // 4 qrst
68 // 4 uvwx
69 // 2 yz
70 }
71 }