golang中bufio和ioutil的使用
阿新 • • 發佈:2021-11-30
bufio
- bufio包實現了帶緩衝區的讀寫,是對檔案讀寫的封裝
- bufio緩衝寫資料
模式 | 含義 |
---|---|
os.O_WRONLY | 只寫 |
os.O_CREATE | 建立檔案 |
os.O_RDONLY | 只讀 |
os.O_RDWR | 讀寫 |
os.O_TRUNC | 清空 |
os.O_APPEND | 追加 |
- bufio讀、寫資料
func main() { //wr() re() } func re() { // 讀檔案用os.Open file, err := os.Open("./t01.txt") if err != nil { fmt.Println(err.Error()) return } defer file.Close() // 獲取reader物件 reader := bufio.NewReader(file) for { line, _, err := reader.ReadLine() if err == io.EOF { break } if err != nil { fmt.Println(err.Error()) return } fmt.Println(string(line)) } } func wr() { // 寫檔案用os.OpenFile file, err := os.OpenFile("t01.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) if err != nil { fmt.Println(err.Error()) return } defer file.Close() // 獲取Writer物件 writer := bufio.NewWriter(file) for i := 0; i < 10; i++ { writer.WriteString(fmt.Sprintf("hello %d\n", i)) } // 重新整理緩衝區,強制寫出 writer.Flush() }
ioutil工具包
- 工具包寫檔案
- 工具包讀取檔案
func main() { //wr() re() } func wr() { if err := ioutil.WriteFile("./t02.txt", []byte("哈哈哈哈\n"), 0644); err != nil { fmt.Println(err.Error()) return } } func re() { data, err := ioutil.ReadFile("./t02.txt") if err != nil { fmt.Println(err.Error()) return } fmt.Println(string(data)) }
例子:實現一個Cat命令
使用檔案操作相關知識,模擬實現linux平臺cat命令的功能。
func main() { flag.Parse() // 解析命令列引數 if flag.NArg() == 0 { // 如果沒有引數,預設從標準輸入讀取內容 reader := bufio.NewReader(os.Stdin) cat(reader) } // 依次讀取每個指定檔案的內容,並列印到終端 for i := 0; i < flag.NArg(); i++ { file, err := os.Open(flag.Arg(i)) if err != nil { fmt.Fprintf(os.Stdout, "reading from %s failed, err: %v \n", flag.Arg(i), err) continue } cat(bufio.NewReader(file)) } } // cat 命令實現 func cat (r *bufio.Reader) { for { buf, err := r.ReadBytes('\n') // 注意是字元 if err == io.EOF { break } fmt.Fprintf(os.Stdout, "%s", buf) } }