golang读写文件的几种方法
读取的文件放在file/test:也就是file包下的test这个文件,里面写多一点文件
读文件方式一:利用ioutil.ReadFile直接从文件读取到[]byte中
func Read0() (string){
f, err := ioutil.ReadFile("file/test")
if err != nil {
fmt.Println("read fail", err)
}
return string(f)
}
登录后复制
读文件方式二:先从文件读取到file中,再从file读取到buf,buf再追加到最终的[]byte
func Read1() (string){
//获得一个file
f, err := os.Open("file/test")
if err != nil {
fmt.Println("read fail")
return ""
}
//把file读取到缓冲区中
defer f.Close()
var chunk []byte
buf := make([]byte, 1024)
for {
//从file读取到buf中
n, err := f.Read(buf)
if err != nil && err != io.EOF{
fmt.Println("read buf fail", err)
return ""
}
//说明读取结束
if n == 0 {
break
}
//读取到最终的缓冲区中
chunk = append(chunk, buf[:n]...)
}
return string(chunk)
//fmt.Println(string(chunk))
}
登录后复制
读文件方式三:先从文件读取到file, 在从file读取到Reader中,从Reader读取到buf, buf最终追加到[]byte
//先从文件读取到file, 在从file读取到Reader中,从Reader读取到buf, buf最终追加到[]byte,这个排第三
func Read2() (string) {
fi, err := os.Open("file/test")
if err != nil {
panic(err)
}
defer fi.Close()
r := bufio.NewReader(fi)
var chunks []byte
buf := make([]byte, 1024)
for {
n, err := r.Read(buf)
if err != nil && err != io.EOF {
panic(err)
}
if 0 == n {
break
}
//fmt.Println(string(buf))
chunks = append(chunks, buf...)
}
return string(chunks)
//fmt.Println(string(chunks))
}
登录后复制
读文件方式四:读取到file中,再利用ioutil将file直接读取到[]byte中
//读取到file中,再利用ioutil将file直接读取到[]byte中, 这是最优
func Read3() (string){
f, err := os.Open("file/test")
if err != nil {
fmt.Println("read file fail", err)
return ""
}
defer f.Close()
fd, err := ioutil.ReadAll(f)
if err != nil {
fmt.Println("read to fd fail", err)
return ""
}
return string(fd)
}
登录后复制
PHP中文网,大量编程入门教程,欢迎学习!