90_Go基础_1_58 read

 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 }