目录
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())
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章: