天天看點

Go的檔案操作小結

計算機中的檔案是存儲在外部媒體(通常是磁盤)上的資料集合,檔案分為文本檔案(以ASCII碼存儲的檔案)和二進制檔案(包含其他資料的檔案),文本檔案字尾通常是.txt,二進制檔案有.bat,.bin,.exe等等

.什麼是io,在計算機中指的是input/output,由于程式運作時資料是在記憶體中駐留的,由CPU這個超快的計算核心來執行,涉及到資料交換的地方,通常是磁盤,網絡等。就需要IO接口

在Go中,輸入輸出操作是通過能讀能寫的位元組流資料模型來實作的,為此,io包提供了io.Reader和io.Writer來進行輸入輸出操作,如下圖

Go的檔案操作小結

我們看到的io接口是這樣的

無論是什麼包的Reader接口中都會有一個read方法,我們看無論什麼包裡的read方法,會發現傳參是[]byte類型,之後read方法會流式讀取檔案中的資料,如果檔案夠大時 看,每個讀取的字元個數就是我們的切片容量。

栗子:

write将len個字元從切片寫到基本資料流中

bufio包實作了緩存io,它包裝了io.Reader和io.Writer對象,建立了另外的Reader和Writer對象,他們也實作 了io.Reader接口,不過是有緩存的。

該類型表示本地系統上的檔案,它實作了io.Reader和io.Writer,是以可以在任何流IO上下文中使用,

其中os.File,即檔案類型中蘊含的fileperm表示了檔案權限

如:

0777 //-rwxrwxrwx 所有人都可讀、寫、執行

0666 //-rw-rw-rw 所有人都可讀,寫,但不可執行

0644 //-rw-r-r 所有者有讀寫權限,使用者組和其他人隻能夠讀

下面是一個将字元串切片寫入檔案中的栗子

Standard output input and error ,os包中公開三個變量,os.Stdout,os.Stdin,os.Stderr,他們的類型為os* *file,分别表示作業系統标準輸出\輸入和錯誤的檔案句柄

下面是一個将字元串直接列印到标準輸出的栗子

os.OpenFile()函數能夠以指定模式打開檔案,進而實作檔案寫入相關功能

其中:

name:要打開的檔案名 flag:打開檔案的模式 perm:檔案權限

os.O_WRONLY

隻寫

os.O_CREATE

建立檔案

os.O_RDONLY

隻讀

os.O_RDWR

讀寫

os.O_TRUNC

清空

os.O_APPEND

追加

追加模式:隻能寫不能讀,寫一個已經存在的檔案,會在檔案的後面寫内容,追加一個不存在的檔案,會先清空檔案内容再寫

清空模式:一個檔案如果存在,且為隻讀或者隻寫成功打開,就将其長度截短為0

perm:檔案權限,一個八進制數。r(讀)04,w(寫)02,x(執行)01

bufio.NewWriter