11、go的文件操作

文件

创建一个测试文件
image
代码测试:

func main() {
	// 打开文件
	file, err := os.Open("E:/test/Test.txt")
	if err != nil { // err不为空,说明报错
		fmt.Println("文件打开出错:", err)
	}
	fmt.Printf("文件:%v", file) // 文件:&{0xc00010a780}

	// 关闭文件:
	err2 := file.Close()
	if err2 != nil {
		fmt.Println("关闭文件失败")
	}
}

io引入

image

读取文件

func main() {
	// 不需要进行流的打开/关闭操作,这些封装在ReadFile函数里面了
	// 读取文件,返回:[]byte, err
	file, err := ioutil.ReadFile("E:/test/Test.txt")
	if err != nil {
		fmt.Println("读取有误:", err)
	}
	fmt.Printf("%v", string(file)) // hello,golang
}

使用带缓冲区的方式:
比如这个文件的内容很多,有很多行

func main() {
	// 打开文件
	file, err := os.Open("E:/test/Test.txt")
	if err != nil {
		fmt.Println("文件打开失败")
	}
	// 函数退出时,让file关闭,防止内存泄露
	defer file.Close()

	// 创建一个流
	reader := bufio.NewReader(file)
	// 进行读取操作
	for {
		// 读取到换行就结束
		str, err := reader.ReadString('\n')
		// io.EOF表示读取到文件结尾
		if err == io.EOF {
			break
		}
		// 如果没有读取到文件结尾,就正常输出
		fmt.Println(str)
	}
	// 结束
	fmt.Println("文件读取成功,并全部读取完毕")
}

打印:
image

写出文件

func main() {
	// 写入文件:
	// 先打开文件,在E:/test目录下会生成一个文件demo.txt
	// 参数2:文件打开模式, 参数3:权限控制
	file, err := os.OpenFile("E:/test/demo.txt", os.O_RDWR|os.O_APPEND|os.O_CREATE, 0666)
	if err != nil {
		fmt.Println("打开文件失败:", err)
	}
	// 及时关闭文件
	defer file.Close()

	// 写入文件操作: IO流 --> 缓冲输出流(带缓冲区)
	writer := bufio.NewWriter(file)
	// 写入10句你好到缓冲区里面
	for i := 0; i < 10; i++ {
		writer.WriteString("你好")
	}
	// 刷新数据,把数据刷到磁盘
	writer.Flush()

	// 查看一下0666是什么权限,代表什么意思
	s := os.FileMode(0666).String()
	fmt.Println(s)	// -rw-rw-rw-
}

允许完代码,查看对应路径下的文件,写入成功
image

文件复制操作

就是去读一个文件,然后把这个文件的内容写出去

func main() {
	// 定义源文件
	file1Path := "E:/test/demo.txt"
	// 定义目标文件
	file2Path := "E:/test/demo2.txt"

	// 对文件进行读取
	content, err := ioutil.ReadFile(file1Path)
	if err != nil {
		fmt.Println("读取有问题")
		return
	}
	// 写出文件
	err = ioutil.WriteFile(file2Path, content, 0666)
	if err != nil {
		fmt.Println("写出失败")
	}
}

运行完代码后,到对应目录查看写出去复制好的文件
image

posted @ 2022-11-25 15:59  aBiu--  阅读(15)  评论(0编辑  收藏  举报