網(wǎng)站首頁 編程語言 正文
1. 文件的打開與關(guān)閉
1.1 os.open
os.open 函數(shù)能打開一個文件 調(diào)用 close() 方法 關(guān)閉文件
//打開文件 open, err := os.Open("./1.text") if err != nil { //打印異常信息 fmt.Println("open file err", err) } fmt.Println("文件獲取完畢") //沒有出現(xiàn)異常,關(guān)閉文件 open.Close()
為了防止忘記關(guān)閉文件,通常都將關(guān)閉文件的代碼寫在 defer中
//打開文件 open, err := os.Open("./1.text") defer func() { if open != nil { // 關(guān)閉文件 open.Close() } }() if err != nil { //打印異常信息 fmt.Println("open file err", err) } fmt.Println("文件獲取完畢")
1.2 os.OpenFile() 指定模式打開文件
func OpenFile(name string, flag int, perm FileMode) (*File, error) { ... }
其中:
name:要打開的文件名 flag:打開文件的模式。 模式有以下幾種:
模式 | 含義 |
---|---|
os.O_WRONLY | 只寫 |
os.O_CREATE | 創(chuàng)建文件 |
os.O_RDONLY | 只讀 |
os.O_RDWR | 讀寫 |
os.O_TRUNC | 清空 |
os.O_APPEND | 追加 |
perm:文件權(quán)限,一個八進制數(shù)。r(讀)04,w(寫)02,x(執(zhí)行)01。
2. 文件的讀取
2.1 打開文件的方式讀取文件中的數(shù)據(jù)
//首先需要打開一個文件 open, err := os.Open("./1.text") defer func() { e := recover() if e != nil { fmt.Println("打開文件出現(xiàn)了異常", e) } }() if err != nil { // 如果有異常 沒必要往下走了 拋出 panic(err) } //如果沒有異常 //創(chuàng)建 字節(jié)切片 bytes := make([]byte, 1024) defer func() { e := recover() if e != nil { fmt.Println("讀取文件出現(xiàn)了異常", e) } }() for { //循環(huán)讀 _, err := open.Read(bytes) if err != nil { panic(err) } //打印結(jié)果 fmt.Println(string(bytes)) }
2.2 使用 bufio 整行讀取文件
bufio 是在file的基礎(chǔ)上封裝了一層API , 支持更多的功能
//同樣的首先打開一個文件 file, err := os.Open("./1.text") defer recover() if err != nil { panic("文件打開出現(xiàn)異常") } // 封裝為 bufio reader := bufio.NewReader(file) defer recover() for { //讀到指定字符串換一行 line, _, err := reader.ReadLine() if err != nil { if err == io.EOF { fmt.Println("文件讀寫完畢") break } panic("文件讀取出現(xiàn)異常") } fmt.Println(string(line)) } fmt.Println("程序運行結(jié)束") func main() { file, err := os.OpenFile("xx.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) }
3. 寫入文件操作
無論是文件讀取還是文件寫入 都是需要先打開文件 再進行操作
3.1 file.Write 與 file.WriteString
// 首先打開文件 O_RDWR 讀寫權(quán)限 O_TRUNC 清空文件 0 開頭表示八進制 666表示 當用用戶 當前組 其他用戶 都是可讀可寫權(quán)限 file, err := os.OpenFile("1.text", os.O_RDWR|os.O_TRUNC, 0666) if err != nil { fmt.Printf("打開文件出現(xiàn)異常 %v", err) } defer file.Close() // 返回 寫入的字節(jié)數(shù) write, err := file.Write([]byte("測試文件寫入 \n")) file.WriteString("一次寫入整個字符串") if err != nil { fmt.Println(err) } fmt.Println(write)
3.2 bufio.NewWriter
// 基于緩存操作 file, err := os.OpenFile("2.text", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666) if err != nil { panic(err) } defer func() { file.Close() if e := recover(); e != nil { fmt.Printf("異常 : 打開文件出現(xiàn)異常 %v", e) } }() // 使用 bufio 基于緩存操作io流 // 需要傳入 一個 io 接口包下的 Writer 接口實現(xiàn)類 而 file 實現(xiàn)了該 方法 writer := bufio.NewWriter(file) writer.WriteString(" 寫入緩存字符串內(nèi)容 2") //需要將緩存中的數(shù)據(jù)刷新到硬盤上 writer.Flush()
3.3 ioUtil 工具類
// 使用工具類 打開文件,寫入文件一氣呵成 err := ioutil.WriteFile("3.text", []byte("工具類寫入內(nèi)容"), 0666) if err != nil { fmt.Println("程序運行出現(xiàn)異常", err) }
原文鏈接:https://blog.csdn.net/JAVAlife2021/article/details/125599765
相關(guān)推薦
- 2022-11-09 Python運算符教程之邏輯門詳解_python
- 2022-03-01 show-overflow-tooltip實現(xiàn)表格列內(nèi)容過長顯示提示
- 2022-09-26 Go并發(fā)同步Mutex典型易錯使用場景_Golang
- 2022-07-14 利用Matlab實現(xiàn)圖像亮度分布統(tǒng)計圖_C 語言
- 2022-05-01 WinForm中Application.Idle方法詳解_C#教程
- 2022-11-07 Android內(nèi)置SQLite的使用詳細介紹_Android
- 2023-02-05 解讀golang中的const常量和iota_Golang
- 2022-03-18 .NET?6開發(fā)TodoList應用之實現(xiàn)全局異常處理_實用技巧
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支