1.打开和关闭文件
//只读方式打开当前目录下的main.go文件file, err := os.Open("./main.go")if err != nil {fmt.Println("open file failed!!!",err)return}//关闭文件file.Close()
为了防止文件忘记关闭,我们通常使用defer注册文件关闭语句。
2.读取文件
2.1file.Read()
基本使用
package mainimport ("fmt""io""os")func main() {file, err := os.Open("./Client.go") //打开文件if err != nil {fmt.Println("open file failed",err)}defer file.Close() //关闭文件var tmp = make([]byte,1024) //申请1024字节空间n, err := file.Read(tmp) //文件读取返回字节数if err == io.EOF{fmt.Println("文件读完了")return}if err != nil{fmt.Println("read file failed,err",err)return}fmt.Printf("读完了%d字节数据\n",n) //打印字节数fmt.Println(string(tmp[:n])) //打印文件内容}
循环读取
import ("fmt""io""os")func main() {file, err := os.Open("./Client.go") //打开文件if err != nil {fmt.Println("open file failed",err)return}defer file.Close() //关闭文件var content []byte //内容切片var tmp = make([]byte,128) //申请1024字节空间//循环都群for {n, err := file.Read(tmp)if err == io.EOF {fmt.Println("文件读完了")break}if err != nil {fmt.Println("read file failed",err)return}content = append(content,tmp[:n]...)}fmt.Println(string(content))}
2.2bufio读取文件
bufio是在file的基础上封装了一层API,支持更多的功能。
import ("bufio""fmt""io""os")func main() {file, err := os.Open("./Client.go")if err != nil {fmt.Println("open file failed",err)return}defer file.Close()reader := bufio.NewReader(file)for {line, err := reader.ReadString('\n')if err == io.EOF {if len(line) != 0 {fmt.Println(line)}fmt.Println("文件读完了")break}if err != nil {fmt.Println("read file failed",err)}fmt.Println(line)}}
2.3ioutil读取整个文件
io/ioutil包的ReadFile方法能够读取完整的文件,只需要将文件名作为参数传入。
import ("fmt""io/ioutil")func main() {file, err := ioutil.ReadFile("./Client.go")if err != nil {fmt.Println("read file failed",err)return}fmt.Println(string(file))}
3.文件写入操作
3.1Write和WriteString
func main() {file, err := os.OpenFile("xx.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)if err != nil {fmt.Println("open file failed",err)return}defer file.Close()str := "Hello World!!!"file.Write([]byte(str)) //写入字节切片数据file.WriteString(str) //直接写入字符串数据}
3.2bufio.NewWriter
file, err := os.OpenFile("xx.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)if err != nil {fmt.Println("open file failed",err)return}defer file.Close()writer := bufio.NewWriter(file)for i := 0; i < 10; i++ {writer.WriteString("HelloWorld")}writer.Flush()
3.3ioutil.WriteFile
str := "Hello World"err := ioutil.WriteFile("./xx.txt", []byte(str), 0666)if err != nil {fmt.Println("write file failed",err)return}
