8.Go-Reader,Writer和ioutil
8.1.Reader
(1)输入流
- 流是应用程序和外部资源进行数据交互的纽带
- 流分为输入流和输出流,输入和输出都是相对于程序,把外部数据传入程序中叫做输入流,反之叫做输出流
- 在Go语言标准库中io包下是Reader接口表示输入流,只要实现这个接口就属于输入流
(2)手动创建流
//Learn_Go/main.go package main import ( "fmt" "strings" ) func main() { r := strings.NewReader("hello world") b := make([]byte,r.Size()) n,err := r.Read(b) if err != nil{ fmt.Println("读取流数据失败",err) return } fmt.Println("读取的数据长度为:",n) //读取的数据长度为: 11 fmt.Println("数据内容为:",string(b)) //数据内容为: hello world }
(3)读取文件内容
//Learn_Go/main.go package main import ( "fmt" "os" ) func main() { f,_ := os.Open("D:/test.txt") fileInfo,_ := f.Stat() b := make([]byte,fileInfo.Size()) f.Read(b) fmt.Println(string(b)) } //结果 床前明月光, 疑是地上霜。 举头望明月, 低头思故乡。
8.2.Writer
//Learn_Go/main.go package main import "os" func main() { filePath := "D:/go.txt" f,err := os.OpenFile(filePath,os.O_APPEND,0660) // 0660 表示权限 defer f.Close() if err != nil{ f,_ = os.Create(filePath) //如果文件不存在,就新建一个文件 } //f.Write([]byte("你好,世界")) f.WriteString("床前明月光,\r\n疑是地上霜。\r\n举头望明月,\r\n低头思故乡。") }
8.3.ioutil
ioutil包下提供了对文件读写的工具函数,通过这些函数快速实现文件的读写操作
(1)打开文件后使用ReadAll把文件内容读出来
//Learn_Go/main.go package main import ( "fmt" "io/ioutil" "os" ) func main() { f,err := os.Open("D:/go.txt") defer f.Close() if err != nil{ fmt.Println(err) return } b,err := ioutil.ReadAll(f) if err != nil{ fmt.Println(err) return } fmt.Println(string(b)) }
(2)可以直接读取文件中内容
//Learn_Go/main.go package main import ( "fmt" "io/ioutil" ) func main() { b,err := ioutil.ReadFile("D:/go.txt") if err != nil{ fmt.Println(err) return } fmt.Println(string(b)) }
(3)写数据
//Learn_Go/main.go package main import "io/ioutil" func main() { //每次清空再写,而不是追加 ioutil.WriteFile("D:/go.txt",[]byte("你好,世界"),0666) }
(4)读取所有目录
//Learn_Go/main.go package main import ( "fmt" "io/ioutil" ) func main() { fi,_ := ioutil.ReadDir("D:/") for _,n := range fi{ fmt.Println(n.Name()) //D盘下所有目录的名字 } }
皮豆设计(logo设计神器):http://pidou.cn