读取数据
package main import ( "os" "fmt" "io" ) func main() { /* 读取数据: Reader接口: //方法 Read(p []byte)(n int, error) //n是读到的字节数 */ //读取本地aa.txt文件中的数据 //step1:打开文件 fileName := "/Users/ruby/Documents/pro/a/aa.txt" //内容 abcdefghij file, err := os.Open(fileName) if err != nil { fmt.Println("err:", err) return } //step3:关闭文件 defer file.Close() //step2:读取数据 bs := make([]byte, 4, 4) //实际中是1024或者1024*2/*4 //第一次读取 n, err := file.Read(bs) //向切片中存储数据 fmt.Println(err) //<nil> fmt.Println(n) //4 fmt.Println(bs) //[97 98 99 100] fmt.Println(string(bs)) //abcd //第二次读取 n, err = file.Read(bs) fmt.Println(err) //<nil> fmt.Println(n) //4 fmt.Println(bs) //[101 102 103 104] fmt.Println(string(bs)) //efgh //第三次读取 n, err = file.Read(bs) fmt.Println(err) //<nil> fmt.Println(n) //2 fmt.Println(bs) //[105 106 103 104] fmt.Println(string(bs)) //ijgh //第四次读取 n, err = file.Read(bs) fmt.Println(err) //EOF fmt.Println(n) //0 n := -1 for { n, err = file.Read(bs) if n == 0 || err == io.EOF { fmt.Println("读取到了文件的末尾,结束读取操作。。") break } fmt.Println(string(bs[:n])) } }
2. 写出数据
package main import ( "os" "fmt" "log" ) func main() { /* 写出数据: */ fileName := "/Users/ruby/Documents/pro/a/ab.txt" //step1:打开文件 //step2:写出数据 //step3:关闭文件 //file,err := os.Open(fileName) //os.O_CREATE 不存在就创建 //os.O_WRONLY 每次都会覆盖掉原有的内容 //os.O_APPEND 每次向问文件的末尾开始写 file,err := os.OpenFile(fileName,os.O_CREATE|os.O_WRONLY|os.O_APPEND,os.ModePerm) if err != nil{ fmt.Println(err) return } defer file.Close() //写出数据 //bs :=[]byte{65,66,67,68,69,70}//A,B,C,D,E,F bs :=[] byte{97,98,99,100} //a,b,c,d //n,err := file.Write(bs) n,err := file.Write(bs[:2]) //n是写出多少字节(整数) fmt.Println(n) HandleErr(err) file.WriteString(" ") //直接写出字符串 n,err = file.WriteString("HelloWorld") fmt.Println(n) HandleErr(err) file.WriteString(" ") n,err =file.Write([]byte("today")) //转成切片(字节类型) fmt.Println(n) HandleErr(err) } //处理错误的函数 func HandleErr(err error){ if err != nil{ log.Fatal(err) } }