前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go语言学习-文件读写 io os ioutil

go语言学习-文件读写 io os ioutil

作者头像
solate
发布2019-07-22 16:49:42
1.3K0
发布2019-07-22 16:49:42
举报
文章被收录于专栏:solate 杂货铺

文件读写

os 打开文件,创建文件

  1. func Create(name string) (file *File, err error) 创建新文件,如果文件已存在,将被截断。新建的文件是可读写的。默认权限为0666(Linux 下文件的权限设置格式)。
  2. func Open(name string) (file *File, err error) 打开已经存在的文件,用来读取文件内容。Open 打开的文件是只读的。不能写。
  3. func OpenFile(name string, flag int, perm FileMode) (file *File, err error)OpenFile 是一个通用的函数,可以用来创建文件,以只读方式打开文件,以读写方式打开文件等
代码语言:javascript
复制
package main

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

func main() {
	/*打开文件 ,如果文件不存在将会新建,如果已存在,新写入的内容将追加到文件尾
	os.O_RDONLY : 如果设置为只读,那么将写入不了数据
	os.O_RDWR : 设置为读写
	*/
	f, err := os.OpenFile("./test.txt", os.O_RDWR | os.O_APPEND | os.O_CREATE, 0666)
	if err != nil {
		fmt.Println(err)
	}
	defer f.Close()
	f.WriteString("test a string!")


	buf := make([]byte, 1024)
	var str string
	/*重置文件指针,否则读不到内容的。*/
	f.Seek(0, os.SEEK_SET)
	for {
		n, ferr := f.Read(buf)
		if ferr != nil && ferr != io.EOF {
			fmt.Println(ferr.Error())
			break
		}
		if n == 0 {
			break
		}
		fmt.Println(n)
		str += string(buf[0:n])
	}
	fmt.Println(str)
}

file

1.func (f *File) Seek(offset int64, whence int) (ret int64, err error) Seek 用来设置文件指针的位置,offet 是偏移量,whence 的取值可以是下面的三个: SEEK_SET 相对文件开始偏移 SEEK_CUR 相对文件当前位置偏移 SEEK_END 相对文件末尾偏移

ioutil

1.func ReadAll(r io.Reader) ([]byte, error) 从 r 中读取所有内容

代码语言:javascript
复制
package main

import (
	"fmt"
	"os"
	"io/ioutil"
)

func main() {
	f, err := os.OpenFile("./test.txt", os.O_RDWR | os.O_APPEND | os.O_CREATE, 0666)
	if err != nil {
		fmt.Println(err)
	}
	defer f.Close()
	//f.WriteString("test a string!")

	buf, err := ioutil.ReadAll(f)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(string(buf))
}

2.func ReadFile(filename string) ([]byte, error) 从文件 filename 中读取内容,一次性读取整个文件,成功 error=nil。

代码语言:javascript
复制
package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
	buf, err := ioutil.ReadFile("./test.txt")
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	fmt.Println(string(buf))
}

3.func WriteFile(filename string, data []byte, perm os.FileMode) error 向文件中写数据,如果文件不存在,将以 perm 权限创建文件。

代码语言:javascript
复制
//如果原来文件有内容,则会删除覆盖掉

package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
	err := ioutil.WriteFile("./test.txt", []byte("abcdefg"), 0777)
	if err != nil {
		fmt.Println(err.Error())
	} else {
		fmt.Println("OK")
	}
}

遍历目录下文件

OpenFile 除了可以打开文件,还可以打开一个目录。在 File 对像有一个 Readdir 函数,用来读取某目录下的所有文件和目录信息,位于 OS 包中.

os

1.func (f *File) Readdir(n int) (fi []FileInfo, err error) n>0 最多返回 n 个文件。如个小于等零,返回所有的。

filepath.Walk 也是用 Readdir 来实现的

代码语言:javascript
复制
package main

import (
	"fmt"
	"os"
)

func main() {
	f, err := os.OpenFile("./", os.O_RDONLY, 0666)
	if err != nil {
		fmt.Println(err)
		return
	}
	arrFile, err1 := f.Readdir(0)
	if err1 != nil {
		fmt.Println(err1)
		return
	}
	for k, v := range arrFile {
		fmt.Println(k, "\t", v.Name(), "\t", v.IsDir())
	}
}

ioutil

1.func ReadDir(dirname string) ([]os.FileInfo, error) 读取目录下所有的文件和子目录

代码语言:javascript
复制
package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
	arrFile, err := ioutil.ReadDir("./")
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	for k, v := range arrFile {
		fmt.Println(k, "\t", v.Name(), "\t", v.IsDir())
	}
}

gob 序列化

序列化就是将对象的状态信息转换为可以存储或传输的形式的过程。

Gob 是 Go 中所特有的序列化技术,它支持除 interface,function,channel 外的所有 Go 数 据类型。序列化使用 Encoder,反序列化使用 Decoder。

代码语言:javascript
复制
package main

import (
	"encoding/gob"
	"fmt"
	"os"
)

type Student struct {
	Name string
	Age  int
}

func main() {
	s := &Student{"张三", 19}
	f, err := os.Create("data.dat")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer f.Close()

	//创建 Encoder 对像
	encode := gob.NewEncoder(f)
	//将s序列化到f文件中
	encode.Encode(s)

	//重置文件指针到开始位置
	f.Seek(0, os.SEEK_SET)

	decoder := gob.NewDecoder(f)
	var s1 Student
	//反序列化对像
	decoder.Decode(&s1)
	fmt.Println(s1)
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文件读写
    • os 打开文件,创建文件
      • file
        • ioutil
          • 遍历目录下文件
            • os
            • ioutil
          • gob 序列化
          相关产品与服务
          文件存储
          文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档