網(wǎng)站首頁 編程語言 正文
基本介紹
文件,對我們并不陌生,文件是數(shù)據(jù)源(保存數(shù)據(jù)的地方)的 一種
輸入流和輸出流 文件在程序中是以流的形式來操作的
流:數(shù)據(jù)在數(shù)據(jù)源(文件)和程序(內(nèi)存)之間經(jīng)歷的路徑 輸入流:數(shù)據(jù)從文件到內(nèi)存的路徑 輸出流:數(shù)據(jù)從內(nèi)存到文件的路徑
- os.File封裝所有文件相關(guān)操作,File是一個結(jié)構(gòu)體
文件基本操作
讀操作
package main import ( "bufio" "fmt" "io" "io/ioutil" "mahonia" "os" ) func main() { //防止控制臺中文亂碼 如果是Golang編譯則需要安裝第三方轉(zhuǎn)碼包git clone https://github.com/axgle/mahonia.git var enc mahonia.Decoder enc = mahonia.NewDecoder("gbk") //讀取文件的內(nèi)容并顯示在終端,使用os.Open, file.Close, bufio.NewReader(), reader.ReadString //打開文件 file,err:=os.Open(文件的絕對路徑) file,err:=os.Open("F:/test.txt") if err !=nil{ fmt.Println("open file err=",err) } //關(guān)閉文件 defer file.Close() //要及時關(guān)閉文件,否則會有內(nèi)存泄露 //創(chuàng)建一個"Reader",帶緩存 默認(rèn)緩存大小為4096 reader:=bufio.NewReader(file) reader:=bufio.NewReader(file) //讀取文件的內(nèi)容 for{ str,err:=reader.ReadString('\n') fmt.Print(enc.ConvertString(str)) /* 你好啊 真的很好asdb 123 */ if err ==io.EOF{// 文件末尾 break } } //一次性讀取文件內(nèi)容,適用于文件較小的 無需開啟和關(guān)閉文件 // 使用 ioutil.ReadFile content為byte[] content,err:=ioutil.ReadFile("f:/test.txt") if err!=nil{ fmt.Println("read file err=",err) } fmt.Print(enc.ConvertString(string(content))) /* 你好啊 真的很好asdb 123 */ }
寫操作
文件打開函數(shù) func OpenFile(name string,flag int,perm FileMode)(file *File,err error)
package main import ( "bufio" "fmt" "io" "io/ioutil" "mahonia" "os" ) func main() { //Read1() //Read2("f:/test.txt",'gbk') /* 你好啊 真的很好asdb 123 你好啊 真的很好asdb 123 */ //創(chuàng)建一個新文件,寫入內(nèi)容 5句 "hello,Gardon" //Write() //打開一個存在的文件中,將原來的內(nèi)容覆蓋成新的內(nèi)容10句,"你好,世界!!" //Write2() //打開一個存在的 文件,將原來的內(nèi)容追加內(nèi)容"ABC! ENGLISH!" //Write3() //打開一個存在的文件,將原來的內(nèi)容讀出顯示在終端,并追加5句"hello,北京" Write4() } func Read1(){ //防止控制臺中文亂碼 如果是Golang編譯則需要安裝第三方轉(zhuǎn)碼包git clone https://github.com/axgle/mahonia.git var enc mahonia.Decoder enc = mahonia.NewDecoder("gbk") //讀取文件的內(nèi)容并顯示在終端,使用os.Open, file.Close, bufio.NewReader(), reader.ReadString //打開文件 file,err:=os.Open(文件的絕對路徑) file,err:=os.Open("F:/test.txt") if err !=nil{ fmt.Println("open file err=",err) } //關(guān)閉文件 defer file.Close() //要及時關(guān)閉文件,否則會有內(nèi)存泄露 //創(chuàng)建一個"Reader",帶緩存 默認(rèn)緩存大小為4096 reader:=bufio.NewReader(file) reader:=bufio.NewReader(file) //讀取文件的內(nèi)容 for{ str,err:=reader.ReadString('\n') fmt.Print(enc.ConvertString(str)) /* 你好啊 真的很好asdb 123 */ if err ==io.EOF{// 文件末尾 break } } } func Read2(filename string,encode string){ var enc mahonia.Decoder enc = mahonia.NewDecoder(encode) //一次性讀取文件內(nèi)容,適用于文件較小的 無需開啟和開啟文件 // 使用 ioutil.ReadFile content為byte[] content,err:=ioutil.ReadFile(filename) if err!=nil{ fmt.Println("read file err=",err) } fmt.Print(enc.ConvertString(string(content))) } func Write(){ filename:="f:/test2.txt" //創(chuàng)建文件,并以只寫形式打開 file,err:=os.OpenFile(filename,os.O_CREATE |os.O_WRONLY,0666) if err !=nil{ fmt.Println("open file err=",err) return } defer file.Close() //寫入內(nèi)容 str:="hello,Gardon\r\n" //寫入時,帶有緩存的*Writer writer:=bufio.NewWriter(file) for i:=0;i<5 ;i++ { writer.WriteString(str) } //刷新緩存 writer.Flush() //讀取文件 Read2(filename,"gbk") /* hello,Gardon hello,Gardon hello,Gardon hello,Gardon hello,Gardon */ } func Write2(){ filename:="f:/test2.txt" //創(chuàng)建文件,并以只寫形式打開 file,err:=os.OpenFile(filename,os.O_CREATE |os.O_TRUNC,0666) if err !=nil{ fmt.Println("open file err=",err) return } defer file.Close() //寫入內(nèi)容 str:="你好,世界!!\r\n" //寫入時,帶有緩存的*Writer writer:=bufio.NewWriter(file) for i:=0;i<10 ;i++ { writer.WriteString(str) } //刷新緩存 writer.Flush() //讀取文件 Read2(filename,"utf-8") /* 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! */ } func Write3(){ filename:="f:/test2.txt" //創(chuàng)建文件,并以只寫形式打開 file,err:=os.OpenFile(filename,os.O_CREATE |os.O_APPEND,0666) if err !=nil{ fmt.Println("open file err=",err) return } defer file.Close() //寫入內(nèi)容 str:="ABC! ENGLISH!\r\n" //寫入時,帶有緩存的*Writer writer:=bufio.NewWriter(file) writer.WriteString(str) //刷新緩存 writer.Flush() //讀取文件 Read2(filename,"utf-8") /* 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! ABC! ENGLISH! */ } func Write4(){ filename:="f:/test2.txt" //創(chuàng)建文件,并以只寫形式打開 file,err:=os.OpenFile(filename,os.O_RDWR |os.O_APPEND,0666) if err !=nil{ fmt.Println("open file err=",err) return } defer file.Close() //追加內(nèi)容 Read2(filename,"utf-8") /* 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! ABC! ENGLISH! */ str:="hello,北京\r\n" //寫入時,帶有緩存的*Writer writer:=bufio.NewWriter(file) writer.WriteString(str) //刷新緩存 writer.Flush() //讀取文件 Read2(filename,"utf-8") /* 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! 你好,世界!! ABC! ENGLISH! hello,北京 */ }
寫操作案例
查看文件或目錄是否存在
package main import ( "fmt" "os" ) func main() { fmt.Println(PathExists("f:/test2.txt")) //true <nil> fmt.Println(PathExists("f:/test3.txt")) //false <nil> } func PathExists(path string) (bool, error) { _, err := os.Stat(path) //如果返回的錯誤為nil,說明文件或文件夾存在 if err == nil { return true, nil } //如果返回的錯誤類型使用os.IsNotExist()判斷為true,說明文件或文件夾不存在 if os.IsNotExist(err){ return false, nil } //如果返回的 錯誤為其他類型,則不確定是否在存在 return false,err }
拷貝文件
package main import ( "bufio" "fmt" "io" "os" ) func main() { fmt.Println(PathExists("f:/test2.txt")) //true <nil> fmt.Println(PathExists("f:/test3.txt")) //false <nil> written,err:=CopyFile("f:/test3.txt","f:/test2.txt") if err!=nil{ fmt.Println("拷貝失敗!!") }else{ fmt.Println("拷貝成功!!") } fmt.Println(written) } func PathExists(path string) (bool, error) { _, err := os.Stat(path) //如果返回的錯誤為nil,說明文件或文件夾存在 if err == nil { return true, nil } //如果返回的錯誤類型使用os.IsNotExist()判斷為true,說明文件或文件夾不存在 if os.IsNotExist(err){ return false, nil } //如果返回的 錯誤為其他類型,則不確定是否在存在 return false,err } func CopyFile(writerFileName string,readerFileName string) (written int64,err error){ ReaderFile,err2:=os.Open(readerFileName) WriterFlag,_:=PathExists(writerFileName) var WriterFile *os.File if WriterFlag{ WriterFile,err=os.OpenFile(writerFileName,os.O_WRONLY |os.O_TRUNC,0666) }else{ WriterFile,err=os.OpenFile(writerFileName,os.O_WRONLY |os.O_CREATE,0666) } if err !=nil{ fmt.Println("file open err=",err) return } writer:=bufio.NewWriter(WriterFile) defer WriterFile.Close() if err2 !=nil{ fmt.Println("file open err=",err2) return } defer ReaderFile.Close() reader:=bufio.NewReader(ReaderFile) return io.Copy(writer,reader) }
原文鏈接:https://juejin.cn/post/7146111998802165790
相關(guān)推薦
- 2022-03-14 flutter ‘package:flutter/src/widgets/container.dar
- 2022-11-21 Python?tabulate結(jié)合loguru打印出美觀方便的日志記錄_python
- 2023-05-22 關(guān)于PyTorch中nn.Module類的簡介_python
- 2024-03-07 SpringAOP對獲取Bean的影響理解
- 2022-02-14 Linux?sftp命令用法_Linux
- 2023-08-01 elementui自定義Slider樣式
- 2022-07-23 C++強制類型轉(zhuǎn)換的四種方式_C 語言
- 2023-01-10 Docker調(diào)度器Kubernetes使用過程_docker
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- 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被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支