1、打开文件
os.Open()函数能够打开一个文件,返回一个*File和一个err。
//打开文件file, err := os.Open("./满江红")if err != nil {fmt.Println("err: ", err)}//关闭文件句柄defer file.Close()
2、读文件
package mainimport ("bufio""fmt""io""io/ioutil""os")func readBytes(file *os.File) {var b = make([]byte, 3)n, err := file.Read(b)if err != nil {fmt.Println("err:", err)return}fmt.Printf("读取字节数:%d\n", n)fmt.Printf("切片值:%v\n", b)fmt.Printf("读取内容:%v\n", string(b[:n]))}func readLines(file *os.File) {reader := bufio.NewReader(file)for {// (1) 按行都字符串strs, err := reader.ReadString('\n') // 读取到换行符为止,读取内容包括换行符fmt.Print(err, strs)// (2) 按行都字节串// bytes, err := reader.ReadBytes('\n')// fmt.Print(bytes)// fmt.Print(string(bytes))if err == io.EOF { //io.EOF 读取到了文件的末尾// fmt.Println("读取到文件末尾!")break}}}func readFile() {content, err := ioutil.ReadFile("满江红") //包含了打开文件和读取整个文件,适用于较小文件if err != nil {fmt.Println("read file failed, err:", err)return}fmt.Print(string(content))}func main() {//打开文件file, err := os.Open("满江红") // 相对路径或者绝对路径if err != nil {fmt.Println("err: ", err)}//关闭文件句柄defer file.Close()// (1) 按字节读取数据// readBytes(file)// (2) 按行读取文件// readLines(file)// (3) 读取整个文件// readFile()}
3、写文件
package mainimport ("bufio""fmt""io/ioutil""os")func writeBytesOrStr(file *os.File) {str := "满江红\n"//写入字节切片数据file.Write([]byte(str))//直接写入字符串数据file.WriteString("怒发冲冠,凭栏处、潇潇雨歇。")}func writeByBufio(file *os.File) {writer := bufio.NewWriter(file)//将数据先写入缓存,并不会到文件中writer.WriteString("大浪淘沙\n")// 必须flush将缓存中的内容写入文件// writer.Flush()}func writeFile() {str := "怒发冲冠,凭栏处、潇潇雨歇。"err := ioutil.WriteFile("满江红3", []byte(str), 0666)if err != nil {fmt.Println("write file failed, err:", err)return}}func main() {/*os.O_RDONLY: 以只读的方式打开os.O_WRONLY: 以只写的方式打开os.O_RDWR : 以读写的方式打开os.O_APPEND: 以追加的方式打开os.O_CREAT: 创建并打开一个新文件os.O_TRUNC: 打开一个文件并截断它的长度为零(必须有写权限)os.O_EXCL: 如果指定的文件存在,返回错误*/file, err := os.OpenFile("满江红new", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666)if err != nil {fmt.Println("open file failed, err:", err)return}defer file.Close()// 写字节或者字符串writeBytesOrStr(file)// flush写writeByBufio(file)// 写文件writeFile()}
4、读写文件
读取一个文件前三行内容,并追加一行hello world
package mainimport ("bufio""fmt""io""os")func main() {file, err := os.OpenFile("读写满江红", os.O_APPEND|os.O_RDWR, 0666)if err != nil {fmt.Println("open file failed, err:", err)return}defer file.Close()// 读取前三行内容reader := bufio.NewReader(file)fmt.Println("读取的前三行内容:")for i := 0; i < 3; i++ {// (1) 按行都字符串strs, err := reader.ReadString('\n') // 读取到换行符为止,读取内容包括换行符// (2) 按行都字节串// bytes, err := reader.ReadBytes('\n')if err == io.EOF { //io.EOF 读取到了文件的末尾// fmt.Println("读取到文件末尾!")break}fmt.Print(strs)}// 追加‘hello world’writer := bufio.NewWriter(file)//将数据先写入缓存,并不会到文件中writer.WriteString("hello world")// 必须flush将缓存中的内容写入文件writer.Flush()}
