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)讀取文件內容spa

//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包下提供了對文件讀寫的工具函數,經過這些函數快速實現文件的讀寫操做blog

(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)寫數據string

//Learn_Go/main.go
package main

import "io/ioutil"

func main() {
	//每次清空再寫,而不是追加
	ioutil.WriteFile("D:/go.txt",[]byte("你好,世界"),0666)
}

(4)讀取全部目錄it

//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盤下全部目錄的名字
	}
}
相關文章
相關標籤/搜索