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

Golang中文件目錄操作的實現(xiàn)步驟詳解

 更新時間:2023年05月31日 09:02:27   作者:周小末天天開心  
在Golang中,文件目錄是指計算機文件系統(tǒng)中的文件夾或目錄。目錄是用于組織和存儲文件的一種方式,可以包含文件和其他子目錄,本文主要介紹了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 文件目錄操作的資料請關注腳本之家其它相關文章!

相關文章

  • golang?Strings包使用總結

    golang?Strings包使用總結

    Go語言在處理字符串時,strings包提供了豐富的函數(shù),如常用的strings.Contains檢查是否包含子串,strings.Join拼接字符串數(shù)組,strings.Split切割字符串等,熟悉這些函數(shù)能有效提高編程效率,尤其是在算法競賽或筆試題中
    2021-03-03
  • Go標準庫http?server優(yōu)雅啟動深入理解

    Go標準庫http?server優(yōu)雅啟動深入理解

    這篇文章主要介紹了Go標準庫http?server優(yōu)雅啟動深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • 詳解如何在Go語言中生成隨機種子

    詳解如何在Go語言中生成隨機種子

    這篇文章主要為大家詳細介紹了如何在Go語言中生成隨機種子,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-04-04
  • 深入解析快速排序算法的原理及其Go語言版實現(xiàn)

    深入解析快速排序算法的原理及其Go語言版實現(xiàn)

    這篇文章主要介紹了快速排序算法的原理及其Go語言版實現(xiàn),文中對于快速算法的過程和效率有較為詳細的說明,需要的朋友可以參考下
    2016-04-04
  • go語言實現(xiàn)文件分割的方法

    go語言實現(xiàn)文件分割的方法

    這篇文章主要介紹了go語言實現(xiàn)文件分割的方法,實例分析了Go語言操作文件的技巧,需要的朋友可以參考下
    2015-03-03
  • go語言入門環(huán)境搭建及GoLand安裝教程詳解

    go語言入門環(huán)境搭建及GoLand安裝教程詳解

    這篇文章主要介紹了go語言入門環(huán)境搭建及GoLand安裝教程詳解,需要的朋友可以參考下
    2020-12-12
  • Goland支持泛型了(上機實操)

    Goland支持泛型了(上機實操)

    Go的泛型不是還在設計草圖嗎?最樂觀估計也要2021年8月份。你說Go語言現(xiàn)在都沒開發(fā)好泛型,你支持這個特性有什么用呢?感興趣的朋友跟隨小編一起看看吧
    2020-12-12
  • GO中什么情況會使用變量逃逸

    GO中什么情況會使用變量逃逸

    本文主要介紹了GO中什么情況會使用變量逃逸,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Go?CSV包實現(xiàn)結構體和csv內容互轉工具詳解

    Go?CSV包實現(xiàn)結構體和csv內容互轉工具詳解

    這篇文章主要介紹了Go?CSV包實現(xiàn)結構體和csv內容互轉工具詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 簡單易用的Go逗號comma ok模式使用詳解

    簡單易用的Go逗號comma ok模式使用詳解

    這篇文章主要為大家介紹了簡單易用的Go逗號comma ok模式使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11

最新評論