Golang之如何读取文件内容
作者:mrtwenty
这篇文章主要介绍了Golang之如何读取文件内容问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
Golang读取文件内容
可以一次性读取,也可以按行读取,也可以按字节读取,一般小文件直接一次性读取,当文件内容太大,内存不足,建议逐行读取处理。
package main import ( "bufio" "fmt" "io" "io/ioutil" "os" ) func main() { //1、一次性读取文件内容,还有一个 ReadAll的函数,也能读取 data, err := ioutil.ReadFile("./util/file.go") if err != nil { fmt.Println(err) return } fmt.Println(string(data)) //2、逐行读取 file, err := os.Open("./util/file.go") //打开 if err != nil { fmt.Println(err); return } defer file.Close() //关闭 line := bufio.NewReader(file) for { content, _, err := line.ReadLine() if err == io.EOF { break } fmt.Println(string(content)) } //3、按照字节数读取 file,err= os.Open("./util/file.go") if err!=nil{ fmt.Println(err); return } defer file.Close() //读取数据 bs := make([] byte,4) for { _, err = file.Read(bs) if err == io.EOF { break} fmt.Print(string(bs)) } }
Golang读取文件、图片字节流
读取图片的字节流
package main import ( "io/ioutil" "log" "net/http" "os" ) func main() { // 这里以图片为例子,excel,world也是可以的 url := "https://file.hytwfy.top/jxb.jpg" resByte, err := getRemote(url) if err != nil { log.Println(err) } // resByte 就是要上传到服务器的字节流 } func getRemote(url string) ([]byte, error) { res, err := http.Get(url) if err != nil { // 如果有错误返回错误内容 return nil, err } // 使用完成后要关闭,不然会占用内存 defer res.Body.Close() // 读取字节流 bytes, err := ioutil.ReadAll(res.Body) if err != nil { return nil, err } return bytes, err } // 获得资源,从本地 // 这里以图片为例子,excel,world也是可以的 func getLocal(url string) ([]byte, error) { fp, err := os.OpenFile(url, os.O_CREATE|os.O_APPEND, 6) // 读写方式打开 if err != nil { // 如果有错误返回错误内容 return nil, err } defer fp.Close() bytes, err := ioutil.ReadAll(fp) if err != nil { return nil, err } return bytes, err }
如果要对处理进行处理,可以新建一个字节流进行处理
// 新建空间字节流 newByte := new(bytes.Buffer) /* 文件操作 xxx */ // 读取写入的内容 reader := bytes.NewReader(newByte.Bytes())
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。