Go标准库os的使用
os包提供了操作系统函数的不依赖平台的接口。
一.使用os包读文件
1.使用io.read方法读。
func main() {
// 只读方式打开当前目录下的main.go文件
file, err := os.Open("./main.go")
if err != nil {
fmt.Println("open file failed!, err:", err)
return
}
defer file.Close()
// 循环读取文件
var content []byte
var tmp = make([]byte, 128)
for {
n, err := file.Read(tmp) //读到tmo切片中
if err == io.EOF {
fmt.Println("文件读完了")
break
}
if err != nil {
fmt.Println("read file failed, err:", err)
return
}
content = append(content, tmp[:n]...)
}
fmt.Println(string(content))
}
2.使用bufio读
func main() {
//使用bufio读取
fd,err := os.Open("./main.go")
if err!= nil{
fmt.Println("os.Open failed,err:=",err)
return
}
defer fd.Close()
reader := bufio.NewReader(fd) //创建一个reader,可以不断从fd中读取
for {
line ,err := reader.ReadString('\n') //读一行
if err == io.EOF {
fmt.Println("读完了")
break
}
if err != nil {
fmt.Println("reader.ReadString failed,err:=",err)
return
}
fmt.Print(line)
}
}
3.使用ioutil读取整个文件
func main() {
//使用ioutil读取大文件
data ,err := ioutil.ReadFile("./main.go")
if err!= nil {
fmt.Println("ioutil.ReadFile failed,err :=",err)
return
}
fmt.Print(string(data))
}
二.使用os包写文件
os.Opem是默认以读权限打开,如果需要写文件应该使用os.OpenFile指定模式打开文件。
func main() {
//写文件,指定打开文件的模式和权限
fd,err := os.OpenFile("test.txt",os.O_APPEND|os.O_CREATE|os.O_RDWR,0666)
if err != nil {
fmt.Println("os.OpenFile failed,err :=",err)
return
}
defer fd.Close()
str1 := []byte("hello world!\n")
n,err := fd.Write(str1) //写入二进制切片数据
if err!= nil {
fmt.Println("fd.Write failed,err:=",err)
return
}
fmt.Println(str1[:n])
str2 := "hello world!!!\n"
n,err = fd.WriteString(str2) //写入字符串数据
if err != nil {
fmt.Println("fd.WriteString failed,err:=",err)
return
}
fmt.Println(str2[:n])
}
2.使用bufio.Writer写入数据
func main() {
file, err := os.OpenFile("111.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
if err != nil {
fmt.Println("os.OpenFile failed, err:", err)
return
}
defer file.Close()
writer := bufio.NewWriter(file)
for i := 0; i < 10; i++ {
writer.WriteString("hello world\n") //将数据先写入缓存
}
writer.Flush() //将缓存中的内容写入文件
}
3.使用ioutil写入大数据
func main() {
str := "hello world"
err := ioutil.WriteFile("./22.txt", []byte(str), 0666)
if err != nil {
fmt.Println("write file failed, err:", err)
return
}
}