文件读取与写入
读取
普通实现
package main
import (
"fmt"
"io"
"os"
)
func main() {
fileObj, err := os.Open("./main.go")
if err != nil {
fmt.Printf("open file faied,err:%v", err)
return
}
//关闭文件
defer fileObj.Close()
var tmp [128]byte
for {
n, err := fileObj.Read(tmp[:])
if err == io.EOF {
fmt.Println("读完了")
return
}
fmt.Printf("读了%d个字节\n", n)
fmt.Println(string(tmp[:n]))
if n < 128 {
return
}
}
}
bufio这个包读文件
package main
import (
"bufio"
"fmt"
"io"
"io/ioutil"
"os"
)
//利用bufio逐行读取
func readFromFilebyBufio() {
fileObj, err := os.Open("./main.go")
if err != nil {
fmt.Printf("open file failed:%v", err)
return
}
defer fileObj.Close()
reader := bufio.NewReader(fileObj)
for {
line, err := reader.ReadString('\n')
if err == io.EOF {
return
}
if err != nil {
fmt.Printf("read line failed,err:%v", err)
return
}
fmt.Println(line)
}
}
//利用ioutil读取整个文件
func readFromFilebyIoutil() {
ret, err := ioutil.ReadFile("./main.go")
if err != nil {
fmt.Println("读取错误")
return
}
fmt.Println(string(ret))
}
func main() {
// readFromFilebyBufio()
readFromFilebyIoutil()
}
写入
package main
import (
"bufio"
"fmt"
"os"
)
func writedemo1() {
//O_APPEND 表示追加,O_CREATE表示没有的话新建文件,O_TRUNC表示清空,与运算表示都需要这些操作
fileObj, err := os.OpenFile("./xx.txt", os.O_APPEND|os.O_CREATE|os.O_TRUNC, 0644)
if err != nil {
fmt.Println("错误")
return
}
//写
fileObj.Write([]byte("qweeeeeeee\n")) //写入切片数据
fileObj.WriteString("asdasdas") //直接写入字符串数据
fileObj.Close()
}
func writeDemo2() {
fileObj, err := os.OpenFile("./xx.txt", os.O_APPEND|os.O_CREATE|os.O_TRUNC, 0644)
if err != nil {
fmt.Println("错误")
return
}
defer fileObj.Close()
//创建一个写对象
wr := bufio.NewWriter(fileObj)
wr.WriteString("hello") //写到缓存中
wr.Flush() //将缓存内容写入文件
}
func main() {
writeDemo2()
}