<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
計算機的檔案是儲存再外部媒介(硬碟)上的資料集合,檔案分為文字檔案和二進位制檔案
os.open()函數
能夠開啟一個檔案,返回一個*File
和一個err
,對得到的檔案範例close()
方法能夠關閉檔案
close()可以釋放記憶體空間
範例:
package main import ( "fmt" "os" ) func main() { //系統開啟檔案並賦予檔案實體 file, err := os.Open("./abc.txt") if err != nil { fmt.Println("檔案開啟失敗", err) } else { fmt.Println("檔案開啟成功") file.Close() fmt.Println("檔案關閉成功") } }
輸出結果如下
檔案開啟失敗 open ./abc.txt: The system cannot find the file specified.
package main import "fmt" func hello() { defer fmt.Println("執行defer") //延遲處理,函數關閉前執行 for i := 0; i < 10; i++ { fmt.Println(i) if i == 8 { //手動宕機處理,立馬關閉當前程式,並釋放記憶體空間 panic("程式宕機") //閾值 } } } func main() { hello() }
接收一個位元組切片,返回讀取的位元組數和可能的具體錯誤,讀到檔案末尾時會返回0
和 io.EOF
func (f *File) Read(b []byte) (n int,err error)
範例:
defer
—般用於資源的釋放和異常的捕捉。;
defer
語句會將其後面跟隨的語句進行延遲處理
;跟在defer
後面的語言將會在程式進行最後的return
之後再執行
在defer
歸屬的函數即將返回時,將延遲處理的語句按defer
的逆序進行執行,也就是說,先被defer
的語句最後被執行,最後被 defer
的語句,最先被執行。
package main import "fmt" func main() { defer fmt.Println("執行defer語句") //延遲處理,函數關閉前執行 for i := 0; i < 5; i++ { fmt.Println(i) } }
輸出結果如下
0
1
2
3
4
執行defer語句
package main import "fmt" func hello() { defer fmt.Println("執行defer") //延遲處理,函數關閉前執行 for i := 0; i < 10; i++ { fmt.Println(i) if i == 8 { //手動宕機處理,立馬關閉當前程式,並釋放記憶體空間 panic("程式宕機") } } } func main() { hello() }
package main import ( "fmt" "io" "os" ) func main() { //讀取檔案 file, err := os.Open("./abc.txt") if err != nil { fmt.Println("檔案開啟失敗", err) return } defer file.Close() //main函數結束前執行檔案資源釋放 fmt.Println("檔案開啟成功") //定義引數切片 var result [128]byte n, err := file.Read(result[:]) //以切片的形式讀取 //檔案讀取完成,進行判斷 if err == io.EOF { fmt.Println("檔案讀取完畢", err) return } //讀取過程中出現異常 if err != nil { fmt.Println("檔案讀取失敗", err) return } fmt.Printf("位元組數: %d 個n", n) fmt.Printf("獲取的內容是: %s", string(result[:])) }
使用bufio讀取,bufio 在 file 的基礎上封裝了一層API,支援更多的功能
package main import ( "bufio" "fmt" "io" "os" ) func main() { //讀取檔案 file, err := os.Open("./abc.txt") if err != nil { fmt.Println("檔案開啟失敗", err) return } //main函數結束前執行檔案資源釋放 defer file.Close() //bufio緩衝區讀取 reader := bufio.NewReader(file) //迴圈讀取記憶體,輸出到程式中 for { str, err := reader.ReadString('n') //按行讀取,值賦予給str if err == io.EOF { fmt.Print(str) //要輸出,否則不顯示最後一行 // fmt.Println("檔案讀取完畢") return } if err != nil { fmt.Println("檔案讀取異常", err) return } fmt.Print(str) //取消ln檔案中自帶換行 } }
package main import ( "fmt" "io/ioutil" ) func ReaderFile(path string) { content, err := ioutil.ReadFile(path) if err != nil { fmt.Println("檔案讀取異常") return } fmt.Println(string(content)) //轉換string格式並輸出 } func main() { ReaderFile("./abc.txt") }
package main import ( "bufio" "fmt" "io" "os" ) func main() { //讀取檔案 file, err := os.Open("./abc.txt") if err != nil { fmt.Println("檔案開啟失敗", err) return } //main函數結束前執行檔案資源釋放 defer file.Close() //bufio緩衝區讀取 reader := bufio.NewReader(file) //計數奇偶行 count := 0 for { str, _, err := reader.ReadLine() count++ if err == io.EOF { // fmt.Println("檔案讀取完畢") return } if err != nil { fmt.Println("檔案讀取異常", err) return } if count%2 == 1 { fmt.Println(string(str)) } } }
登入並判斷使用者名稱是否存在
package main import ( "bufio" "fmt" "io" "os" ) //讀取檔案 func main() { //var doing bool var name string fmt.Print("請輸入使用者名稱:") fmt.Scan(&name) //defer fmt.Println("使用者不存在") file, err := os.Open("./abc.txt") if err != nil { fmt.Println("檔案開啟失敗", err) return } //main函數結束前,執行檔案資源釋放 defer file.Close() //利用bufio緩衝區讀取檔案 reader := bufio.NewReader(file) //建立緩衝區,將檔案內容放入到緩衝區 //計數奇偶行 a := 0 for { str, _, err := reader.ReadLine() //每次讀取,a+1 a++ if err == io.EOF { fmt.Println("檔案讀取完畢") //如果檔案讀取完,也沒有返回,則說明使用者不存在 fmt.Println("使用者不存在") return } if err != nil { fmt.Println("檔案讀取錯誤") return } if a%2 == 1 { if name == string(str) { fmt.Println("登入成功") return } } } }
os.OpenFile()
函數能夠以指定模式開啟檔案,從而實現檔案寫入相關功能。
語法格式如下:
func OpenFile(name string,flag int,perm FileMode)(*File,error) {
...
}
name:要開啟的檔名
flag:開啟檔案的模式
模式種類:
模式|含義|
perm:檔案許可權,一個八進位制數。r(讀)04,W(寫)02,x(執行)01
package main import ( "fmt" "os" ) //使用write和writestring寫入 func main() { //寫入方式開啟檔案,建立新檔案,開啟只寫模式,檔案許可權644 file, err := os.OpenFile("abc.txt", os.O_CREATE|os.O_WRONLY, 0644) if err != nil { fmt.Println("檔案開啟失敗", err) return } //位元組切片寫入 file.Write([]byte("this is byte writen")) //字串寫入 str := "this is string write" file.WriteString(str) }
package main import ( "bufio" "fmt" "os" ) //bufio寫入 func main() { file, err := os.OpenFile("tmp.txt", os.O_CREATE|os.O_WRONLY, 0666) //WRONLY,清空 if err != nil { fmt.Println("檔案開啟失敗", err) return } defer file.Close() //檔案寫入緩衝區 write := bufio.NewWriter(file) for i := 0; i < 5; i++ { //內容寫入緩衝區 write.WriteString("this is bufio writen") } //緩衝區資料提交寫入檔案 write.Flush() }
package main import ( "fmt" "io/ioutil" ) func main() { str := "this is ioutil writenthis is test content" //iotuil方式直接寫入,字串轉換成位元組陣列寫入 err := ioutil.WriteFile("./tmp.txt", []byte(str), 0666) if err != nil { fmt.Println("檔案寫入失敗", err) return } }
以上就是Go語言學習之檔案操作方法詳解的詳細內容,更多關於Go語言檔案操作的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45