欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語言文件讀寫操作案例詳解

 更新時(shí)間:2022年09月23日 14:45:29   作者:山與路  
這篇文章主要為大家介紹了Go語言文件讀寫操作案例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

基本介紹

文件,對我們并不陌生,文件是數(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()  //要及時(shí)關(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()  //要及時(shí)關(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"
	//寫入時(shí),帶有緩存的*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"
	//寫入時(shí),帶有緩存的*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"
	//寫入時(shí),帶有緩存的*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"
	//寫入時(shí),帶有緩存的*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)
}

以上就是Go語言文件讀寫操作案例詳解的詳細(xì)內(nèi)容,更多關(guān)于Go語言文件讀寫操作的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • golang 實(shí)現(xiàn)時(shí)間戳和時(shí)間的轉(zhuǎn)化

    golang 實(shí)現(xiàn)時(shí)間戳和時(shí)間的轉(zhuǎn)化

    這篇文章主要介紹了golang 實(shí)現(xiàn)時(shí)間戳和時(shí)間的轉(zhuǎn)化操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • 淺析Go語言中數(shù)組的使用

    淺析Go語言中數(shù)組的使用

    數(shù)組用于在單個變量中存儲相同類型的多個值,而不是為每個值聲明單獨(dú)的變量,這篇文章主要為大家介紹了Go語言中數(shù)組的簡單使用,需要?的可以參考下
    2023-08-08
  • go-micro使用Consul做服務(wù)發(fā)現(xiàn)的方法和原理解析

    go-micro使用Consul做服務(wù)發(fā)現(xiàn)的方法和原理解析

    這篇文章主要介紹了go-micro使用Consul做服務(wù)發(fā)現(xiàn)的方法和原理,這里提供一個通過docker快速安裝Consul的方式,當(dāng)然前提是你得安裝了docker,需要的朋友可以參考下
    2022-04-04
  • Go語言變量初始化的實(shí)現(xiàn)示例

    Go語言變量初始化的實(shí)現(xiàn)示例

    在Go語言中,變量的初始化是編寫程序時(shí)經(jīng)常遇到的重要操作之一,本文主要介紹了Go語言變量初始化的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • Go中g(shù)in框架的*gin.Context參數(shù)常見實(shí)用方法

    Go中g(shù)in框架的*gin.Context參數(shù)常見實(shí)用方法

    *gin.Context是處理HTTP請求的核心,ctx代表"context"(上下文),它包含了處理請求所需的所有信息和方法,例如請求數(shù)據(jù)、響應(yīng)構(gòu)建器、路由參數(shù)等,這篇文章主要介紹了Go中g(shù)in框架的*gin.Context參數(shù)常見實(shí)用方法,需要的朋友可以參考下
    2024-07-07
  • 淺析golang開發(fā)Error的使用詳解

    淺析golang開發(fā)Error的使用詳解

    Error是Go語言開發(fā)中最基礎(chǔ)也是最重要的部分,很多朋友不明白goland error的一些基本使用方法,今天通過本文給大家詳細(xì)介紹下,需要的朋友參考下吧
    2021-07-07
  • Go 并發(fā)讀寫 sync.map 詳細(xì)

    Go 并發(fā)讀寫 sync.map 詳細(xì)

    閱讀本文你將會明確 sync.Map 和原生 map +互斥鎖/讀寫鎖之間的性能情況。標(biāo)準(zhǔn)庫 sync.Map 雖說支持并發(fā)讀寫 map,但更適用于讀多寫少的場景,因?yàn)樗麑懭氲男阅鼙容^差,使用時(shí)要考慮清楚這一點(diǎn)。
    2021-10-10
  • 簡單聊聊Go語言中空結(jié)構(gòu)體和空字符串的特殊之處

    簡單聊聊Go語言中空結(jié)構(gòu)體和空字符串的特殊之處

    在日常的編程過程中,大家應(yīng)該經(jīng)常能遇到各種”空“吧,比如空指針、空結(jié)構(gòu)體、空字符串等,本文就以?Go?語言為例,一起來看看空結(jié)構(gòu)體和空字符串在?Go?語言中的特殊之處吧
    2024-03-03
  • 深入解析Go語言中for循環(huán)的寫法

    深入解析Go語言中for循環(huán)的寫法

    這篇文章主要介紹了Go語言中for循環(huán)的寫法,是Golang入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • Golang實(shí)踐之Error創(chuàng)建和處理詳解

    Golang實(shí)踐之Error創(chuàng)建和處理詳解

    在 C#、Java 等語言中常常使用 try...catch的方式來捕獲異常,但是在Golang 對于錯誤處理有不同的方式,像網(wǎng)上也有很多對 error 處理的最佳實(shí)踐的文章,其中很多其實(shí)就是對 error 的統(tǒng)一封裝,使用規(guī)范進(jìn)行約束,本文主要是記錄自己對處理 Error 的一些認(rèn)識和學(xué)習(xí)
    2023-09-09

最新評論