Golang中文件目錄操作的實現(xiàn)步驟詳解
文件
Golang中,文件是指計算機中存儲數(shù)據(jù)的實體,文件可以是文本文件、二進制文件、配置文件等。在Go語言中,通過操作文件,我們可以讀取文件的內容,寫入數(shù)據(jù)到文件,以及獲取文件的屬性等。
Golang中的文件可以分為兩種類型:文本文件和二進制文件。文本文件是指只包含文本內容的文件,可以用文本編輯器打開進行查看和編輯。而二進制文件是指除文本內容外還包含其他數(shù)據(jù)的文件,如圖片、音頻、視頻等文件。
在Golang中,文件是以文件流的形式進行操作的,文件流是指將文件中的內容作為一個流來處理的方式,通過讀取流來獲取文件的內容,通過寫入流來向文件中寫入數(shù)據(jù)。
文件目錄
在Golang中,文件目錄是指計算機文件系統(tǒng)中的文件夾或目錄。目錄是用于組織和存儲文件的一種方式,可以包含文件和其他子目錄。
Golang中的文件目錄操作基本概念主要涉及文件和目錄的創(chuàng)建、打開、讀取、寫入、刪除等操作。
文件路徑:文件路徑是用于定位文件或目錄的字符串。在Go語言中,可以使用絕對路徑或相對路徑來表示文件路徑。絕對路徑是從根目錄開始的完整路徑,而相對路徑是相對于當前工作目錄的路徑。
文件操作:在Go語言中,可以使用os包進行文件操作。常用的文件操作包括創(chuàng)建文件、打開文件、讀取文件內容、寫入文件內容和關閉文件等。
目錄操作:同樣在os包中,可以進行目錄操作,如創(chuàng)建目錄、刪除目錄、遍歷目錄等。常用的目錄操作函數(shù)包括Mkdir、MkdirAll、Remove、RemoveAll和ReadDir等。
文件信息:通過os包中的函數(shù),可以獲取文件的相關信息,如文件大小、修改時間、權限等。常用的文件信息函數(shù)包括Stat和FileInfo等。
文件讀寫:Go語言中的文件讀寫操作可以使用os包中的Open函數(shù)打開文件,然后使用Read和Write方法來讀取和寫入文件內容。還可以使用bufio包提供的緩沖讀寫方式來提高讀寫效率。
錯誤處理:在文件和目錄操作過程中,可能會出現(xiàn)各種錯誤,如文件不存在、權限不足等。在Go語言中,通過錯誤返回值來處理這些錯誤,常用的處理方式包括檢查錯誤值、使用defer語句關閉文件和使用log包輸出錯誤信息等。
文件刪除:在Go語言中,可以使用os包中的Remove函數(shù)刪除文件。需要注意的是,刪除文件是一個不可逆操作,謹慎使用。
總而言之,Go語言提供了豐富的文件和目錄操作函數(shù),可以方便地進行文件和目錄的創(chuàng)建、打開、讀寫和刪除等操作。開發(fā)者可以根據(jù)具體需求使用這些函數(shù)來處理文件和目錄操作。
文件目錄操作
讀取文件
一、方法一 (file.Read())
1、只讀方式打開文件 file,err := os.Open()
2、讀取文件 file.Read()
3、關閉文件流 defer file Close()
package main import ( "fmt" "io" "os" ) func main() { //只讀方式打開當前目錄下的main.go文件 file, err := os.Open("D:/GoLang/go_demo/helloworld/hello.go") defer file.Close() //必須關閉文件流 if err != nil { fmt.Println(err) return } //操作文件 fmt.Println(file) //&{0xc000100780} //讀取文件里面的內容 var strSlice []byte var tempSlice = make([]byte, 20) for { n, err := file.Read(tempSlice) if err == io.EOF { //err == io.EOF表示讀取完畢 fmt.Println("讀取完畢") break } if err != nil { fmt.Println("讀取失敗") return } strSlice = append(strSlice, tempSlice[:n]...) //注意寫法 } fmt.Println(string(strSlice)) //強制類型轉換 }
成功讀取到了文件的地址
二、方法二 (bufio讀取文件)
1、只讀方式打開文件 file,err := os.Open()
2、創(chuàng)建reader對象 reader := bufio.NewReader(file)
3、ReadString讀取文件 line,err := reader.ReadString('\n')
4、關閉文件流 defer file.Close()
package main import ( "bufio" "fmt" "io" "os" ) func main() { file, err := os.Open("D:/GoLang/go_demo/helloworld/hello.go") defer file.Close() //必須關閉文件流 if err != nil { fmt.Println(err) return } //bufio讀取文件 var fileStr string reader := bufio.NewReader(file) for { line, err := reader.ReadString('\n') //表示一次讀取一行 if err == io.EOF { fileStr += line break } if err != nil { fmt.Println(err) return } fileStr += line } fmt.Println(fileStr) }
三、方法三 (ioutil 讀取方法)
打開關閉文件的方法它都封裝好了,只需要一句話就可以讀取
ioutil.ReadFile("D:/GoLang/go_demo/helloworld/hello.go")
package main import ( "fmt" "io/ioutil" ) func main() { byteStr, err := ioutil.ReadFile("D:/GoLang/go_demo/helloworld/hello.go") if err != nil { fmt.Println(err) return } fmt.Println(string(byteStr)) }
寫入文件
寫入文件需要用到os.OpenFile(),其源碼為:
func OpenFile(name string, flag int, perm FileMode) (*File, error) { testlog.Open(name) f, err := openFileNolog(name, flag, perm) if err != nil { return nil, err } f.appendMode = flag&O_APPEND != 0 return f, nil }
name 要打開的文件名,flag 打開文件的格式,perm 文件權限,一個八進制數(shù) r(讀)04 w(寫)02 x(執(zhí)行)01
其中flag分為:
os.O_WRONLY 只寫
os.O_CREATE 創(chuàng)建文件
os.O_RDONLY 只讀
os.O_RDWR 讀寫
os.O_TRUNC 清空
os.O_APPEND 追加
一、方法一
1、打開文件 file, err := os.OpenFile("D:/GoLang/go_demo/helloworld/hello.go", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666)
2、寫入文件
file.Write([]byte(str)) //寫入字節(jié)切片數(shù)據(jù)
file.WriteString("直接寫入的字符串數(shù)據(jù)") //直接寫入的字符串數(shù)據(jù)
3、關閉文件流 file.Close()
package main import ( "fmt" "os" ) func main() { file, err := os.OpenFile("D:/GoLang/go_demo/helloworld/hello.go", os.O_CREATE|os.O_APPEND, 0666) defer file.Close() if err != nil { fmt.Println(err) return } file.WriteString("http://直接寫入的字符串數(shù)據(jù)") }
hello.go中就會被按要求追加
二、方法二
1、打開文件 file, err := os.OpenFile("D:/GoLang/go_demo/helloworld/hello.go", os.O_CREATE|os.O_APPEND, 0666)
2、創(chuàng)建writer對象 writer := bufio.NewWriter(file)
3、將數(shù)據(jù)寫入緩存 writer.WriteString("你好Golang\n")
4、將緩存中的內容寫入文件 writer.Flush()
5、關閉文件流 file.Close()
package main import ( "bufio" "fmt" "os" "strconv" ) func main() { file, err := os.OpenFile("D:/GoLang/go_demo/helloworld/hello.go", os.O_CREATE|os.O_APPEND, 0666) defer file.Close() if err != nil { fmt.Println(err) return } writer := bufio.NewWriter(file) for i := 0; i < 10; i++ { writer.WriteString("http://你好Golang" + strconv.Itoa(i) + "\n") } writer.Flush() }
按要求追加數(shù)據(jù)
三、方法三 (ioutil寫入文件)
str := "hello Golang"
err := ioutil.WriteFile("D:/GoLang/go_demo/helloworld/hello.go", []byte(str), 0666)
package main import ( "fmt" "io/ioutil" ) func main() { str := "http://hello golang" err := ioutil.WriteFile("D:/GoLang/go_demo/helloworld/hello.go", []byte(str), 0666) if err != nil { fmt.Println(err) return } }
復制文件
一、方法一
byteStr, err1 := ioutil.ReadFile("D:/GoLang/go_demo/helloworld/hello.go")
err2 := ioutil.WriteFile("D:/GoLang/go_demo/helloworld/world.go", byteStr, 0666)
package main import ( "fmt" "io/ioutil" ) func main() { byteStr, err1 := ioutil.ReadFile("D:/GoLang/go_demo/helloworld/hello.go") if err1 != nil { fmt.Println(err1) return } err2 := ioutil.WriteFile("D:/GoLang/go_demo/helloworld/world.go", byteStr, 0666) if err2 != nil { fmt.Println(err2) return } fmt.Println("復制文件成功 ") }
成功復制hello.go中的內容
二、方法二
source, _ := os.Open(srcFileName)
destination, _ := os.OpenFile(dstFileName, os.O_CREATE|os.O_WRONLY, 0666)
n, err := source.Read(buf)
destination.Write(buf[:n]);
package main import ( "fmt" "io" "os" ) // 編寫一個函數(shù),接受兩個文件路徑 srcFileName 和 dstFileName func CopyFile(srcFileName string, dstFileName string) (err error) { sFile, err1 := os.Open(srcFileName) defer sFile.Close() dFile, err2 := os.OpenFile(dstFileName, os.O_CREATE|os.O_WRONLY, 0666) defer dFile.Close() if err1 != nil { return err1 } if err2 != nil { return err2 } var tempSlice = make([]byte, 50) for { //讀取數(shù)據(jù) n, err := sFile.Read(tempSlice) if err == io.EOF { break } if err != nil { return err } //寫入數(shù)據(jù) if _, err := dFile.Write(tempSlice[:n]); err != nil { return err } } return nil } func main() { srcFile := "D:/GoLang/go_demo/helloworld/hello.go" dstFile := "D:/GoLang/go_demo/helloworld/world.go" err := CopyFile(srcFile, dstFile) if err == nil { fmt.Println("拷貝完成") } else { fmt.Printf("拷貝錯誤 err = %v", err) } }
成功拷貝
以上就是Golang中文件目錄操作的實現(xiàn)步驟詳解的詳細內容,更多關于Golang 文件目錄操作的資料請關注腳本之家其它相關文章!
相關文章
Go?CSV包實現(xiàn)結構體和csv內容互轉工具詳解
這篇文章主要介紹了Go?CSV包實現(xiàn)結構體和csv內容互轉工具詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03