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)
}
}