成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一篇文章帶你搞定Go語言基礎之文件操作

開發 前端
本次章節我們主要學習文件操作的相關知識,主要分為讀取文件和寫入文件

[[375517]]

前言

Hey,大家好呀,我是碼農,星期八,這次咱們來說一下文件操作。

文件操作就簡單了,像打開word了,excel了,都是文件操作,當然,我們肯定是不能直接操作word的

我們就從最簡單的普通文件開始叭!

打開和關閉文件

  1. package main 
  2.  
  3. import "os" 
  4.  
  5. func main() { 
  6.     //os.Open是只讀模式 
  7.     fileObj, err := os.Open("永不退縮.txt"
  8.     if err != nil { 
  9.         panic(err) 
  10.     //關閉文件 
  11.     fileObj.Close() 
  12.     //一般情況下使用這種方式關閉文件 
  13.     defer fileObj.Close() 

:如果你使用的是Goland,在學習文件操作這一塊時,盡量不要右擊運行,因為查找文件路徑不一樣

盡可能的編譯成.exe文件,這樣找的就是當前目錄


讀取文件

讀取指定大小

代碼

  1. func main() { 
  2.     //os.Open是只讀模式 
  3.     fileObj, err := os.Open("永不退縮.txt"
  4.     if err != nil { 
  5.         panic(err) 
  6.     var fileBytes = make([]byte,128) 
  7.     n, err := fileObj.Read(fileBytes) 
  8.     if err != nil { 
  9.         panic(err) 
  10.     fmt.Println(string(fileBytes[:n])) 
  11.     //一般情況下使用這種方式關閉文件 
  12.     defer fileObj.Close() 

執行結果


可以發現,根本就沒有讀取完,并且還亂碼了。

讀取整個文件

上述我們只讀取了128個字節,一個中文3個字節,128/3,除下標點符號,應該是40個左右,明顯不夠

那該怎么辦才能讀取所有呢???

上述我們只讀取了128個字節,我們可以在讀取128個字節啊

然后找個罐子將每次讀取的都裝進去,讀取完,裝完,完美

代碼

  1. func main() { 
  2.     //os.Open是只讀模式 
  3.     fileObj, err := os.Open("永不退縮.txt"
  4.     if err != nil { 
  5.         panic(err) 
  6.     //一般情況下使用這種方式關閉文件 
  7.     defer fileObj.Close() 
  8.  
  9.     var 罐子 []string 
  10.     var 每次讀取字節 = make([]byte,128) 
  11.     for
  12.         n, err := fileObj.Read(每次讀取字節) 
  13.         //err == io.EOF表示讀完了,一定要放在err != nil前面 
  14.         if err == io.EOF { 
  15.             break 
  16.         } 
  17.         if err != nil { 
  18.             panic(err) 
  19.         } 
  20.         var 每次讀取字符串 = string(每次讀取字節[:n]) 
  21.         罐子 = append(罐子,每次讀取字符串) 
  22.     fmt.Println(罐子) 

執行結果


會發現還是有亂碼,這是為啥???

這是因為我們每次都是按照字節來讀取一部分,一部分的,但是中文是3個字節,所有有時候可能切錯了,就出現了亂碼

那咋辦呢?沒辦法,默認的讀取文件就這么點功能,更多功能,盡在bufio

bufio

bufio可以理解為原生file操作的一個加強版,更牛叉,功能更多

還是上述這個文件,看看如何完美讀取

代碼

  1. func main() { 
  2.     //os.Open是只讀模式 
  3.     fileObj, err := os.Open("永不退縮.txt"
  4.     if err != nil { 
  5.         panic(err) 
  6.     //一般情況下使用這種方式關閉文件 
  7.     defer fileObj.Close() 
  8.  
  9.     //需要將文件對象傳進去 
  10.     reader := bufio.NewReader(fileObj) 
  11.     for
  12.         //按行讀取 
  13.         row, err := reader.ReadString('\n')//參數是字符,不是字符串 
  14.         if err == io.EOF { 
  15.             break 
  16.         } 
  17.         if err != nil { 
  18.             panic(err) 
  19.         } 
  20.         fmt.Printf("%v",row) 

執行結果


讀取整個文件

可能又有人說了,啊,星期八,我感覺還是麻煩,有沒有更簡單的辦法讀取文件,肯定有呀,一次性讀取所有呢?答案是肯定的,此時需要用到ioutil包。

代碼

  1. func main() { 
  2.     //os.Open是只讀模式 
  3.     bytes, err := ioutil.ReadFile("永不退縮.txt"
  4.     if err != nil { 
  5.         panic(err) 
  6.     fmt.Println(string(bytes)) 

執行結果


但是這種有個缺點,只能讀取小文件,要是來個10G文件也這樣玩,保證電腦死翹翹!!!

寫入文件

寫入文件的話,我們就需要使用openFile這個方法打開文件

在開始之前呢,先記一下下面幾種模式

  • os.O_WRONLY 只寫
  • os.O_RDONLY 只讀
  • os.O_CREATE 如果文件不存在,則創建文件
  • os.O_RDWR 可讀可寫
  • os.O_TRUNC 清空
  • os.O_APPEND 追加文件

寫入字節和寫入行

代碼

  1. func main() { 
  2.     fileObj, err := os.OpenFile("臨時.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) 
  3.     if err != nil { 
  4.         panic(err) 
  5.     defer fileObj.Close() 
  6.     w_content := "我是臨時表內容\n" 
  7.     //Write方法需要將字符串轉成字節 
  8.     fileObj.Write([]byte(w_content)) 
  9.     //WriteString直接寫入字符串 
  10.     fileObj.WriteString(w_content) 

執行結果


bufio寫文件

代碼

  1. func main() { 
  2.     fileObj, err := os.OpenFile("臨時.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) 
  3.     if err != nil { 
  4.         panic(err) 
  5.     defer fileObj.Close() 
  6.     w_content := "我是臨時表內容\n" 
  7.     writer := bufio.NewWriter(fileObj) 
  8.     writer.Write([]byte(w_content)) 
  9.     writer.WriteString(w_content) 
  10.     //寫完必須刷入 
  11.     writer.Flush() 

執行結果


ioutil寫文件

代碼

  1. func main() { 
  2.     w_content := "我是臨時表內容\n" 
  3.     err := ioutil.WriteFile("臨時.txt", []byte(w_content), 0666) 
  4.     if err != nil { 
  5.         panic(err) 

執行結果


拷貝文件

拷貝文件,就是拷貝文件唄,A文件拷貝到B文件中

其實他的底層還是打開倆文件,把A文件內容寫入到B文件中

代碼

  1. func main() { 
  2.     原文件, err := os.Open("永不退縮.txt"
  3.     if err != nil { 
  4.         panic(err) 
  5.     defer 原文件.Close() 
  6.     目標文件, err := os.OpenFile("臨時.txt", os.O_WRONLY|os.O_CREATE, 0666) 
  7.     if err != nil { 
  8.         panic(err) 
  9.     defer 目標文件.Close() 
  10.     //拷貝文件 
  11.     io.Copy(目標文件,原文件) 

執行結果


總結

本次章節我們主要學習文件操作的相關知識,主要分為讀取文件和寫入文件

讀取文件都有原生方法讀寫和bufio加強讀寫和ioutil一次性讀寫

推薦大家使用bufio這個包操作文件,帶有緩沖功能,性能更好!!

能堅持別人不能堅持的,才能擁有別人不能擁有的。加油

 

責任編輯:姜華 來源: Go語言進階學習
相關推薦

2021-02-20 10:06:14

語言文件操作

2020-10-22 08:33:22

Go語言

2020-11-11 10:52:54

Go語言C語言

2020-11-05 09:58:16

Go語言Map

2020-12-23 08:39:11

Go語言基礎技術

2022-02-16 10:03:06

對象接口代碼

2020-12-07 05:59:02

語言Go接口

2021-10-30 10:43:04

語言Go函數

2021-11-03 10:02:07

Go基礎函數

2021-10-09 07:10:31

Go語言基礎

2022-04-27 10:01:43

切片Go封裝

2020-10-23 08:38:19

Go語言

2020-10-25 07:33:13

Go語言

2020-12-09 09:59:32

Go語言技術

2020-12-27 10:15:44

Go語言channel管道

2020-12-30 09:04:32

Go語言TCPUDP

2021-02-27 10:20:18

Go語言flag包開發技術

2021-09-29 10:00:07

Go語言基礎

2021-10-13 10:00:52

Go語言基礎

2020-10-22 11:15:47

Go語言變量
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区在线看 | 久久久久亚洲精品 | 欧美 日韩 国产 成人 | 国产精品成av人在线视午夜片 | 久久久精品网站 | 国产91在线 | 中日 | 亚洲免费精品 | 91视视频在线观看入口直接观看 | 精品久久久久久红码专区 | 91av免费看| 国产一区久久久 | av在线免费网 | 国产传媒在线播放 | 日韩爱爱网站 | 在线观看免费黄色片 | 玖玖视频网 | 日韩α片 | 国产精品免费在线 | av在线视| 在线一级片| 国产乱码精品一区二区三区忘忧草 | 国产一区二区影院 | 国产91黄色 | 国产精品视频免费播放 | 欧美一级黑人aaaaaaa做受 | 无码国模国产在线观看 | 国产1区2区 | 中文字幕 视频一区 | 亚洲精品字幕 | 免费国产一区 | 日韩免费视频一区二区 | 91精品久久久久久久久 | 久久伊人青青草 | 国产一级片 | 成人免费看电影 | 成人在线免费看 | 亚洲成人自拍 | 天天操人人干 | 亚洲精品福利在线 | 狠狠草视频 | 一级毛片成人免费看a |