在编程语言中在学习结束基础之后第一个学习的一般是文件操作,这篇博客主要是作为一篇学习总结
有兴趣于golang语言开发学习的同学可以把这个当做文件处理方面的简单工具
最简单的是对文件的打开和关闭,在os包下的有open方法,这个方法需要一个文件的地址进行输入,之后会对这个文件进行打开,这个时候可以使用一个变量对其进行获取同时要注意这里在文件打不开的时候会抛出一个error那么最好的办法是写成这个样子
file , err := os.Open("d:/test.txt")
那么观察这个办法的源代码,可以发现
func Open(name string) (*File, error) {
return OpenFile(name, O_RDONLY, 0)
}
这里确实是抛出一个文件的地址和一个error
当然对这个的输出也很方便,直接对其文件进行输出即可,但需要注意的是这里直接输出的是文件的地址,假如想要对文件进行内容的读取这个时候可以使用bufio包下的reader函数,这个函数是这个样子的
func NewReader(rd io.Reader) *Reader {
return NewReaderSize(rd, defaultBufSize)
}
这里会将文件的内容进行读取,然后放入缓冲区内,然后只需要对这个对象进行readstring读取即可,那么有人会问这个底下是只有readstring函数吗,假如是要读取int什么的类型怎么办,这个非常简单,它的底下也存在着int一类的函数,那么有一个问题是不能确保每一个数据都是这个类型,那么我可以得到的可能性会下降,这样的话我还是建议直接使用readerString函数,那么在结束之后可以对文件结尾进行判断是否到达文件末尾,到达之后进行退出即可
举个例子
reader := bufio.NewReader(file)
//循环的读取文件的内容
for {
str, err := reader.ReadString('\n')
if err == io.EOF {
break
}
//输出内容
fmt.Printf(str)
}
这里注意,基本上是不需要对文件缓冲区进行处理的。golang给的缓冲区很大,其内部包含4096个字节,相当于4k,那么在正常文件读取是足够了,假如想对缓冲区进行扩大的话可以使用NewReaderSize 创建指定大小的缓冲区。
那么这样依然存在风险,即文件存在打开之后忘记或者延迟关闭的风险,那么这个时候我们可以使用ioutil包下面的readfile函数进行文件的读取,但不同于之前的io包下的open函数,这个函数更加的保密和安全,即在读取之后不需要再进行文件的关闭,这个属于集成好的,直接可以对其进行标准化输出即可
file := "d:/test.txt"
content, err := ioutil.ReadFile(file)
if err != nil {
fmt.Printf("read file err=%v", err)
}
fmt.Printf("%v", string(content))
接下来是在文件当中进行写入,相同的可以使用openfile对文件进行打开,这个好处是可以在任意模式下进行文件的相关处理,比如说可以用
file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_CREATE, 0666)
这样的一句进行对文件的创建和对其中进行写的操作,然后只需要对要输入的部分进行writeString函数进行输入即可
str := "hello,Gardon\r\n"
writer := bufio.NewWriter(file)
for i := 0; i < 5; i++ {
writer.WriteString(str)
}
注意的是writer这个是带缓存的情况,那么在这个函数进行调度之后,需要使用flush函数进行写入文件,不然这个是在缓冲区并没有真正写入文件
剩下更多的就不过多的说明了,这些可以处理平时可以遇到的90以上的文件问题更多的可以使用这些函数
NewReader 创建默认大小的缓冲区
NewReaderSize 创建指定大小的缓冲区
Reader.Buffered 获取缓存可读取字节数
Reset 丢弃当期缓存数据, 所以丢弃的长度与缓冲区大小相关
Reader.Read 将数据存入[]byte 中
Reader. ReadByte 获取缓冲区中的一个字节
Reader.ReadBytes 获取到制定断点的字节
Reader.ReadString 获取到指定断点的字符串