Go 打开文件,写入文件。

 

demo.go(打开文件,写入文件):

package main

import (
	"fmt"
	"io"
	"os"
)

func main() {
	// 打开文件
	// fp, err := os.Open("./demo.txt")  // 只读方式打开
	fp, err := os.OpenFile("./demo.txt", os.O_CREATE|os.O_APPEND, 6) // 读写方式打开
	/*
	  os.O_CREATE|os.O_APPEND
	  或者 os.O_CREATE|os.O_TRUNC|os.O_WRONLY
	  os.O_RDONLY // 只读
	  os.O_WRONLY // 只写
	  os.O_RDWR // 读写
	  os.O_APPEND // 追加(Append)
	  os.O_CREATE // 如果文件不存在则先创建
	  os.O_TRUNC // 文件打开时裁剪文件
	  os.O_EXCL // 和O_CREATE一起使用,文件不能存在
	  os.O_SYNC // 以同步I/O的方式打开
	第三个参数:权限(rwx:0-7)
	  0:没有任何权限
	  1:执行权限
	  2:写权限
	  3:写权限和执行权限
	  4:读权限
	  5:读权限和执行权限
	  6:读权限和写权限
	  7:读权限,写权限,执行权限
	*/
	if err != nil {
		fmt.Println("文件打开失败。")
		return
	}

	// defer延迟调用
	defer fp.Close()  //关闭文件,释放资源。

	// 写入文件(字符串) WriteString()
	count, err2 := fp.WriteString("中文信息\r\n第二行信息\r\n")  // windows中\r\n表示换行
	if err2 != nil {
		fmt.Println("写入文件失败。")
		return
	}
	fmt.Println(count)  // 31(字节,一个汉字3个字节)

	// 写入文件(字符切片) Write()
	slice := []byte{'h', 'e', 'l', 'l', 'o', '\r', '\n'}
	count, err2 = fp.Write(slice)
	count, err2 = fp.Write([]byte("中文信息"))  // 强制类型转换 string-->[]byte

	// 写入文件 从指定光标位置写入  WriteAt()
	count2, _ := fp.Seek(0, io.SeekEnd)  // 计算文件起始位置和末尾之间的字符数(文件大小)。
	count, _ = fp.WriteAt([]byte("hello"), count2)  // 从指定光标位置开始写入
}

 

 

你可能感兴趣的:(Go基础)