go语言文件读写笔记
package main
import (
"fmt"
"io"
"io/ioutil"
"net/http"
"os"
)
//利用ioutil.ReadFile直接从文件读取到[]byte中
func Read0() {
f, err := ioutil.ReadFile("read0.txt")
if err != nil {
fmt.Println("read fail", err)
}
fmt.Println(string(f))
}
//先从文件读取到file中,在从file读取到buf, buf在追加到最终的[]byte
func Read1() {
//获得一个file
f, err := os.Open("read1.txt")
if err != nil {
fmt.Println("read fail")
return
}
//把file读取到缓冲区中
defer f.Close()
var chunk []byte
//make函数分配了一个1024长度的内存
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]...)
}
fmt.Println(string(chunk))
}
//读取到file中,再利用ioutil将file直接读取到[]byte中(速度最快,最优方法)
func Read2() {
f, err := os.Open("read2.txt")
if err != nil {
fmt.Println("read file fail", err)
return
}
defer f.Close()
fn, err := ioutil.ReadAll(f)
if err != nil {
fmt.Println("read to fd fail", err)
return
}
fmt.Println(string(fn))
}
//网络文件的下载及写入
func Read3() {
r, err := http.Get("https://img-home.csdnimg.cn/images/20201124032511.png")
if err != nil {
fmt.Println(err)
} else {
f, _ := os.Create("download.png")
io.Copy(f, r.Body)
}
}
//检查文件是否存在
func CheckFileExist(fileName string) bool {
_, err := os.Stat(fileName)
if os.IsNotExist(err) {
return false
}
return true
}
func main() {
Read0()
Read1()
Read2()
Read3()
fileexist := CheckFileExist("download.png")
fmt.Println(fileexist)
}