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

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

開發(fā) 后端
Hey,大家好呀,我是Go進(jìn)階者,這次咱們來說一下文件操作。文件操作就簡單了,像打開word了,excel了,都是文件操作,當(dāng)然,我們肯定是不能直接操作word的。 我們就從最簡單的普通文件開始叭!

[[382352]]

前言

Hey,大家好呀,我是Go進(jìn)階者,這次咱們來說一下文件操作。

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

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

打開和關(guān)閉文件

  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.     //關(guān)閉文件 
  11.     fileObj.Close() 
  12.     //一般情況下使用這種方式關(guān)閉文件 
  13.     defer fileObj.Close() 

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

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

 

讀取文件

讀取指定大小

代碼

  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.     //一般情況下使用這種方式關(guān)閉文件 
  12.     defer fileObj.Close() 

執(zhí)行結(jié)果

 

可以發(fā)現(xiàn),根本就沒有讀取完,并且還亂碼了。

讀取整個文件

上述我們只讀取了128個字節(jié),一個中文3個字節(jié),128/3,除下標(biāo)點符號,應(yīng)該是40個左右,明顯不夠

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

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

然后找個罐子將每次讀取的都裝進(jìn)去,讀取完,裝完,完美

代碼

  1. func main() { 
  2.     //os.Open是只讀模式 
  3.     fileObj, err := os.Open("永不退縮.txt"
  4.     if err != nil { 
  5.         panic(err) 
  6.     //一般情況下使用這種方式關(guān)閉文件 
  7.     defer fileObj.Close() 
  8.  
  9.     var 罐子 []string 
  10.     var 每次讀取字節(jié) = make([]byte,128) 
  11.     for
  12.         n, err := fileObj.Read(每次讀取字節(jié)) 
  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(每次讀取字節(jié)[:n]) 
  21.         罐子 = append(罐子,每次讀取字符串) 
  22.     fmt.Println(罐子) 

執(zhí)行結(jié)果

 

會發(fā)現(xiàn)還是有亂碼,這是為啥???

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

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

bufio

bufio

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

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

代碼

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

執(zhí)行結(jié)果

 

讀取整個文件

可能又有人說了,啊,星期八,我感覺還是麻煩,有沒有更簡單的辦法讀取文件,肯定有呀,一次性讀取所有呢?答案是肯定的,此時需要用到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)) 

執(zhí)行結(jié)果

 

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

寫入文件

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

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

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

寫入字節(jié)和寫入行

代碼

  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èi)容\n" 
  7.     //Write方法需要將字符串轉(zhuǎn)成字節(jié) 
  8.     fileObj.Write([]byte(w_content)) 
  9.     //WriteString直接寫入字符串 
  10.     fileObj.WriteString(w_content) 

執(zhí)行結(jié)果

 

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èi)容\n" 
  7.     writer := bufio.NewWriter(fileObj) 
  8.     writer.Write([]byte(w_content)) 
  9.     writer.WriteString(w_content) 
  10.     //寫完必須刷入 
  11.     writer.Flush() 

執(zhí)行結(jié)果

 

ioutil寫文件

代碼

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

執(zhí)行結(jié)果

 

拷貝文件

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

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

代碼

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

執(zhí)行結(jié)果

 

總結(jié)

本次章節(jié)我們主要學(xué)習(xí)文件操作的相關(guān)知識,主要分為讀取文件和寫入文件

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

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

本文轉(zhuǎn)載自微信公眾號「Go語言進(jìn)階學(xué)習(xí)」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系Go語言進(jìn)階學(xué)習(xí)公眾號。

 

責(zé)任編輯:武曉燕 來源: Go語言進(jìn)階學(xué)習(xí)
相關(guān)推薦

2021-01-13 08:40:04

Go語言文件操作

2020-11-05 09:58:16

Go語言Map

2020-12-23 08:39:11

Go語言基礎(chǔ)技術(shù)

2022-02-16 10:03:06

對象接口代碼

2020-10-22 08:33:22

Go語言

2020-11-11 10:52:54

Go語言C語言

2021-10-09 07:10:31

Go語言基礎(chǔ)

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語言技術(shù)

2020-12-30 09:04:32

Go語言TCPUDP

2020-12-27 10:15:44

Go語言channel管道

2020-12-07 05:59:02

語言Go接口

2021-10-30 10:43:04

語言Go函數(shù)

2021-11-03 10:02:07

Go基礎(chǔ)函數(shù)

2021-02-27 10:20:18

Go語言flag包開發(fā)技術(shù)

2021-09-29 10:00:07

Go語言基礎(chǔ)

2021-10-13 10:00:52

Go語言基礎(chǔ)

2020-10-22 11:15:47

Go語言變量
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日本偷偷操 | 精品综合 | 国产一区2区| 狠狠爱网址 | 成人精品福利 | 久久精品 | 狠狠亚洲 | 久久精品网 | 中文字幕在线一区 | 国产日韩欧美一区 | 成人精品久久 | 一级黄色av电影 | 欧美日韩在线观看视频网站 | 亚洲一区二区精品视频 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 中文在线播放 | 久草色视频 | 欧美一级免费看 | 日本不卡一区 | 国产亚洲网站 | 男女视频免费 | 在线免费观看成人 | 国产精品v| 成人免费看黄网站在线观看 | 欧美精品免费观看二区 | 国产在线第一页 | 国产欧美综合在线 | www.久久精品视频 | 国产精品久久久久久久岛一牛影视 | 毛片a| 国产第二页 | 国产精品免费一区二区三区 | 精品久久久久久久人人人人传媒 | 毛片区 | 久久精品久久久 | 亚洲精品日韩精品 | 亚洲高清在线 | 精品少妇一区二区三区在线播放 | 午夜激情影院 | 成人精品一区二区三区中文字幕 | 欧美黄色网 |