• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Go语言文件操作

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

基本介绍

  1. 输入流和输出流

  2. os.File 封装所有文件相关操作,File是一个结构体

官方文档

文件操作

打开文件和关闭文件

打开文件使用的是os包下的Open,OpenFile函数

func Open(name string) (file *File, err error)

Open打开一个文件用于读取。如果操作成功,返回的文件对象的方法可用于读取数据;对应的文件描述符具有O_RDONLY模式。如果出错,错误底层类型是*PathError。

func OpenFile(name string, flag int, perm FileMode) (file *File, err error)

OpenFile是一个更一般性的文件打开函数,大多数调用者都应用Open或Create代替本函数。它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。如果操作成功,返回的文件对象可用于I/O。如果出错,错误底层类型是*PathError。

import "os"

func OpenFileTest() {
	file, err := os.Open("D:\\GoWorkplace\\src\\project01\\resources\\test.txt") // 用open函数直接打开
	if err != nil {
		fmt.Println("open file err: ", err)
		return
	}

	fmt.Println("file: %v", file)

	err = file.Close()
	if err != nil {
		fmt.Println("close file err: ", err)
	}
}

func OpenFileTest2() {
	file, err := os.OpenFile("D:\\GoWorkplace\\src\\project01\\resources\\test.txt", os.O_WRONLY | os.O_CREATE, 0666) // 用openFile函数直接打开
	if err != nil {
		fmt.Println("open file err: ", err)
		return
	}

	fmt.Println("file: %v", file)

	err = file.Close()
	if err != nil {
		fmt.Println("close file err: ", err)
	}
}

关闭文件用Close函数,一般会结合defer,在函数执行完毕后自动释放文件句柄

读取文件内容

读取文件内容可以用bufio,ioutil两个包

func FileReaderTest() {

	file, err := os.Open("D:\\GoWorkplace\\src\\project01\\resources\\test.txt")
	if err != nil {
		fmt.Println("open file err: ", err)
		return
	}

	defer file.Close()

	reader := bufio.NewReader(file)

	for {

		str, err := reader.ReadString(\'\n\')
		fmt.Print(str)
		if err == io.EOF {
			break
		}
	}

	fmt.Println("read finish...")
}

func IOUtilTest() {

	file := "../resources/test.txt"
	content, err := ioutil.ReadFile(file)
	if err != nil {
		fmt.Printf("read file err = %v \n", err)
	}
	fmt.Println(string(content))
}

修改文件内容

可以用bufio包下的write函数,也可以使用ioutil包下的write函数


func WriteFileTest3() {
	filePath := "../resources/test.txt"
	file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_APPEND, 0666) // 需要选择模式
	if err != nil {
		fmt.Printf("oped file err = %v \n", err)
		return
	}
	defer file.Close()

	str := "ABC! ENGLISH \r\n"
	writer := bufio.NewWriter(file)

	for i := 0; i < 5; i++ {
		writer.WriteString(str)
    }
    
    // bufio.writer 是缓存写入,所以需要Flush才能真正写入到文件
	writer.Flush()

}


func ReadAndWriteFileTest() {

	a := "../resources/a.txt"
	test := "../resources/test.txt"

	content, _ := ioutil.ReadFile(test)

	ioutil.WriteFile(a, content, 0666) // 一次性创建清空写入文件
}

判断文件或文件夹是否存在

可以使用os.Stat()函数返回单额错误值进行判断

func Exists(path string) (bool error) {
    _, err := os.Stat(path)
    iif err == nil {
        return true, nil
    } 
    if os.IsNotExist(err) {
        return false, nil
    }
    return false, err
}

拷贝文件

缺少很多err的判断

func CopyFileTest(){
	a := "../resources/a.txt"
	b := "../resources/b.txt"

	fa, _ := os.Open(a)
	fb, _ := os.OpenFile(b, os.O_WRONLY | os.O_CREATE, 0666)

	defer fa.Close()
	defer fb.Close()

	reader := bufio.NewReader(fa)
	writer := bufio.NewWriter(fb)

	io.Copy(writer, reader)
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go语言极速入门手册.go - Bill Yuan发布时间:2022-07-10
下一篇:
Go语言极速入门手册.go发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap