<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Go 標準庫的 os
包,為我們提供很多操作檔案的函數,如 Open(name)
開啟檔案、Create(name)
建立檔案等函數,與之對應的是 bufio
包,os
包是直接對磁碟進行操作的,而 bufio
包則是帶有緩衝的操作,不用每次都去操作磁碟。
Open(name string) (*File, error)
通過 檔名 或 檔案路徑+檔名 的形式開啟一個檔案,此檔案只能用於讀操作,如果檔案不存在則返回 PathError
。
name
為檔名或檔案路徑+檔名。*File
為一個 File
結構體的指標型別,通過指標可以對檔案進行讀寫等操作。error
為開啟檔案的過程中產生的錯誤。OpenFile(name string, flag int, perm FileMode) (*File, error)
通過指定 檔名 或 檔案路徑+檔名、檔案操作模式、檔案許可權三個引數開啟一個檔案,之後可對此檔案進行讀寫操作。
name
為檔名或檔案路徑+檔名。flag
為指定檔案操作模式,可選值有 O_RDONLY
→ 唯讀操作、O_WRONLY
→ 只寫操作、O_RDWR
→ 讀寫操作、O_APPEND
→ 寫入時向檔案追加資料、O_CREATE
→ 如果不存在,則建立一個新檔案等。perm
參數列示檔案的模式和許可權,例如 0666
為讀寫許可權。如果對檔案許可權所對應的數位不瞭解,可以去學習一下。*File
為一個 File
結構體的指標型別,通過指標可以對檔案進行讀寫等操作。error
為開啟檔案的過程中產生的錯誤。File.Read(b []byte) (n int, err error)
讀取與 b
等長度的位元組,並儲存到 b
裡面。
b
為一個切片陣列,用於指定讀取長度和儲存位元組資料。n
為所讀取位元組的長度。error
為讀取位元組的過程中產生的錯誤。import ( "fmt" "os" ) func main() { file, err := os.Open("1.txt") if err != nil { fmt.Println(err) return } defer file.Close() data := make([]byte, 11) count, err := file.Read(data) if err != nil { return } fmt.Println("位元組資料:", data) // [72 101 108 108 111 32 119 111 114 108 100] fmt.Println("字串資料:", string(data)) // Hello world fmt.Println("所獲取位元組的長度:", count) // 11 }
執行結果:
位元組資料: [72 101 108 108 111 32 119 111 114 108 100]
字串資料: Hello world
所獲取位元組的長度: 11
Open
函數開啟 1.txt
檔案,用 file
變數接收,預設為可讀模式;11
的位元組切片,接著通過 file
變數的方法 Read
讀取長度為 11
的位元組資料。os.Open("1.txt")
等價於 os.OpenFile("1.txt", os.O_RDONLY, 0)
。讀取檔案,建議使用 bufio.NewReader
和 Reader.ReadString
,減少磁碟的操作。
NewReader(rd io.Reader) *Reader
獲取一個有緩衝區的 Reader
指標變數,緩衝區預設大小為 4096
位元組。通過變數可以對資料進行讀操作。
rd
為一個介面,實現這個介面的資料型別變數都可以作為引數,例如上面提到的 File
。*Reader
為 Reader
結構體的指標,通過指標可以讀取緩衝區的資料。ReadString(delim byte) (string, error)
讀取資料,直到第一次遇到分隔符 delim
為止。讀取過程中發生錯誤會返回 EOF
錯誤資訊。
delim
為分隔符,每次讀取時遇到分隔符就會終止。1.txt 檔案的內容為:
Hello world Hello Golang Hello Gopher
import ( "bufio" "fmt" "io" "os" "strings" ) func main() { file, err := os.OpenFile("1.txt", os.O_RDONLY, 0) if err != nil { fmt.Println(err) return } defer file.Close() reader := bufio.NewReader(file) for { if lineData, err := reader.ReadString('n'); err != nil { if err == io.EOF { // 因為是以換行符為分隔符,如果最後一行沒有換行符,那麼返回 io.EOF 錯誤時,也是可能讀到資料的,因此判斷一下是否讀到了資料 if len(lineData) > 0 { fmt.Println(lineData) } break } } else { fmt.Println(strings.TrimRight(lineData, "n")) } } }
執行結果:
Hello World
Hello Golang
Hello Gopher
OpenFile
函數開啟 1.txt
檔案,用 file
變數接收,指定為可讀模式;NewReader
函數建立一個緩衝區,將預設長度的位元組讀取到緩衝區中;Reader
結構體的方法 ReadString
,以 n
為分隔符,按行讀取資料,然後列印資料。io.EOF
錯誤時,也是可能讀到資料的,因此需要判斷一下是否讀到了資料。本文先是對 os
包 和 bufio
包進行簡單的介紹,然後介紹 os
包裡的 Open
和 OpenFile
函數以及 File
結構體的方法 Read
,通過案例展示它們的使用方式。緊接著引出 bufio
包裡的 NewReader
函數和 Reader
結構體的方法 ReadString
,讀取檔案的操作推薦使用它們,能減少對磁碟的操作,高效讀取資料。
到此這篇關於一文帶你掌握Go語言中的檔案讀取操作的文章就介紹到這了,更多相關Go語言檔案讀取內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45