40 Go 語言的文件操作
本文主要介紹 Go 語言中對文件系統(tǒng)的操作,Go 語言內置庫中提供了豐富的文件操作函數(shù),所以本文主要介紹使用Go 語言中的內置包——“os” 來實現(xiàn)文件操作。
1. 文件創(chuàng)建/打開
若你想創(chuàng)建/打開一個文件,則可以使用
func OpenFile(name string, flag int, perm uint32) (file *File, err Error)
參數(shù)解釋:
-
name:就是文件名,若文件不在執(zhí)行程序目錄下,則可以使用文件的相對路徑或者絕對路徑。
-
flag:是文件打開模式,其支持模式共有(O_RDONLY|O_WRONLY|O_RDWR三個中必須要選一個):
-
- O_RDONLY:以只讀方式打開文件;
- O_WRONLY:以只寫方式打開文件;
- O_RDWR:以讀寫方式打開文件;
- O_APPEND:寫入時將數(shù)據(jù)追加到文件;
- O_CREATE:如果不存在新文件,則創(chuàng)建一個新文件;
- O_EXCL:與O_CREATE一起使用,文件不能存在;
- O_SYNC:為同步I/O打開;
- O_TRUNC:打開時截斷常規(guī)可寫文件;
-
perm:文件權限,一般最高為0777。
代碼示例
package main
import (
"fmt"
"os"
)
func main() {
f, err := os.OpenFile("a.txt", os.O_RDWR|os.O_CREATE, 0777)
if err != nil {
panic(err)
}
fmt.Println(f.Name())
}
- 第 9 行:以讀寫的方式打開一個名為a.txt的文件,若文件不存在則創(chuàng)建這個文件,文件權限為0777;
- 第 13 行:打印這個文件名;
執(zhí)行結果:
2. 文件讀取
文件打開之后,就可以從得到的文件對象中讀取文件內容。我們在 a.txt 文件中輸入 file test
字符串,來驗證讀取結果。
代碼示例:
package main
import (
"fmt"
"os"
)
func main() {
f, err := os.OpenFile("a.txt", os.O_RDWR|os.O_CREATE, 0777)
if err != nil {
panic(err)
}
b := make([]byte, 10) //最大讀取字符數(shù)量
i, err := f.Read(b)
if err != nil {
panic(err)
}
fmt.Println(i) //輸出讀取的字符串的個數(shù)
fmt.Println(string(b)) //輸出讀取到的字符串
}
執(zhí)行結果:
3. 文件寫入
文件寫入有兩種模式,追加模式和覆寫模式。如果在打開文件的時候加上了 O_APPEND 模式,就是追加,如果不加就是覆寫。
代碼示例:
package main
import (
"os"
)
func main() {
f1, err := os.OpenFile("a.txt", os.O_RDWR|os.O_CREATE, 0777)
if err != nil {
panic(err)
}
f1.WriteString("覆寫字符")
f1.Close()
f2, err := os.OpenFile("b.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0777)//追加模式打開文件
if err != nil {
panic(err)
}
f2.WriteString("追加字符")
}
反復執(zhí)行幾遍上述代碼,然后打開兩個文件,文件內容如下:
覆寫的文件中只有"覆寫字符"這四個字,因為其寫入被不斷覆寫了。
追加的文件中有很多"追加字符",因為其寫入是不斷的被追加到文件末尾的。
4. 小結
本文主要介紹了 Go 語言中自帶的 os 包的文件操作,需要注意的是文件的打開中若不確定文件是否存在,就可以加上 O_CREATE。改寫文件若是需要追加到文件末尾,記得在打開文件的時候要加上 O_APPEND。