国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Golang】Golang進階系列教程--Golang中文件目錄操作的實現(xiàn)

這篇具有很好參考價值的文章主要介紹了【Golang】Golang進階系列教程--Golang中文件目錄操作的實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、文件

Golang中,文件是指計算機中存儲數(shù)據(jù)的實體,文件可以是文本文件、二進制文件、配置文件等。在Go語言中,通過操作文件,我們可以讀取文件的內(nèi)容,寫入數(shù)據(jù)到文件,以及獲取文件的屬性等。

Golang中的文件可以分為兩種類型:文本文件和二進制文件。文本文件是指只包含文本內(nèi)容的文件,可以用文本編輯器打開進行查看和編輯。而二進制文件是指除文本內(nèi)容外還包含其他數(shù)據(jù)的文件,如圖片、音頻、視頻等文件。

在Golang中,文件是以文件流的形式進行操作的,文件流是指將文件中的內(nèi)容作為一個流來處理的方式,通過讀取流來獲取文件的內(nèi)容,通過寫入流來向文件中寫入數(shù)據(jù)。

二、文件目錄

在Golang中,文件目錄是指計算機文件系統(tǒng)中的文件夾或目錄。目錄是用于組織和存儲文件的一種方式,可以包含文件和其他子目錄。

Golang中的文件目錄操作基本概念主要涉及文件和目錄的創(chuàng)建、打開、讀取、寫入、刪除等操作。

  • 文件路徑:文件路徑是用于定位文件或目錄的字符串。在Go語言中,可以使用絕對路徑或相對路徑來表示文件路徑。絕對路徑是從根目錄開始的完整路徑,而相對路徑是相對于當前工作目錄的路徑。

  • 文件操作:在Go語言中,可以使用os包進行文件操作。常用的文件操作包括創(chuàng)建文件、打開文件、讀取文件內(nèi)容、寫入文件內(nèi)容和關閉文件等。

  • 目錄操作:同樣在os包中,可以進行目錄操作,如創(chuàng)建目錄、刪除目錄、遍歷目錄等。常用的目錄操作函數(shù)包括Mkdir、MkdirAll、Remove、RemoveAll和ReadDir等。

  • 文件信息:通過os包中的函數(shù),可以獲取文件的相關信息,如文件大小、修改時間、權限等。常用的文件信息函數(shù)包括Stat和FileInfo等。

  • 文件讀寫:Go語言中的文件讀寫操作可以使用os包中的Open函數(shù)打開文件,然后使用Read和Write方法來讀取和寫入文件內(nèi)容。還可以使用bufio包提供的緩沖讀寫方式來提高讀寫效率。

  • 錯誤處理:在文件和目錄操作過程中,可能會出現(xiàn)各種錯誤,如文件不存在、權限不足等。在Go語言中,通過錯誤返回值來處理這些錯誤,常用的處理方式包括檢查錯誤值、使用defer語句關閉文件和使用log包輸出錯誤信息等。

  • 文件刪除:在Go語言中,可以使用os包中的Remove函數(shù)刪除文件。需要注意的是,刪除文件是一個不可逆操作,謹慎使用。

總而言之,Go語言提供了豐富的文件和目錄操作函數(shù),可以方便地進行文件和目錄的創(chuàng)建、打開、讀寫和刪除等操作。開發(fā)者可以根據(jù)具體需求使用這些函數(shù)來處理文件和目錄操作。

三、文件目錄操作

3.1、讀取文件

3.1.1、方法一 (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}
	//讀取文件里面的內(nèi)容
	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)) //強制類型轉換
}

成功讀取到了文件的地址

3.1.2、方法二 (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)
}

3.1.3、方法三 (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))
}

3.2、寫入文件

寫入文件需要用到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 追加

3.2.1、方法一

  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ù)

  1. 關閉文件流 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中就會被按要求追加

【Golang】Golang進階系列教程--Golang中文件目錄操作的實現(xiàn),# GoLang,golang

3.2.2、方法二

  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)

  1. 將數(shù)據(jù)寫入緩存 writer.WriteString(“你好Golang\n”)

  2. 將緩存中的內(nèi)容寫入文件 writer.Flush()

  3. 關閉文件流 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ù)

【Golang】Golang進階系列教程--Golang中文件目錄操作的實現(xiàn),# GoLang,golang

3.2.3、方法三 (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
	}
}

【Golang】Golang進階系列教程--Golang中文件目錄操作的實現(xiàn),# GoLang,golang

3.3、復制文件

3.3.1、方法一

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中的內(nèi)容
【Golang】Golang進階系列教程--Golang中文件目錄操作的實現(xiàn),# GoLang,golang

3.3.2、方法二

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】Golang進階系列教程--Golang中文件目錄操作的實現(xiàn),# GoLang,golang文章來源地址http://www.zghlxwxcb.cn/news/detail-613568.html

到了這里,關于【Golang】Golang進階系列教程--Golang中文件目錄操作的實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【Golang】Golang進階系列教程--為什么 Go 語言 struct 要使用 tags

    【Golang】Golang進階系列教程--為什么 Go 語言 struct 要使用 tags

    在 Go 語言中,struct 是一種常見的數(shù)據(jù)類型,它可以用來表示復雜的數(shù)據(jù)結構。在 struct 中,我們可以定義多個字段,每個字段可以有不同的類型和名稱。 除了這些基本信息之外,Go 還提供了 struct tags,它可以用來指定 struct 中每個字段的元信息。 在本文中,我們將探討為什

    2024年02月15日
    瀏覽(40)
  • 【Golang】Golang進階系列教程--為什么 Go 不支持 []T 轉換為 []interface

    【Golang】Golang進階系列教程--為什么 Go 不支持 []T 轉換為 []interface

    在 Go 中,如果 interface{} 作為函數(shù)參數(shù)的話,是可以傳任意參數(shù)的,然后通過類型斷言來轉換。 舉個例子: 不管是傳 int 還是 string,最終都能輸出正確結果。 那么,既然是這樣的話,我就有一個疑問了,拿出我舉一反三的能力。是否可以將 []T 轉換為 []interface 呢? 比如下面

    2024年02月15日
    瀏覽(41)
  • 【Golang】Golang進階系列教程--為什么說 Go 語言字符串是不可變的?

    【Golang】Golang進階系列教程--為什么說 Go 語言字符串是不可變的?

    最近有讀者留言說,平時在寫代碼的過程中,是會對字符串進行修改的,但網(wǎng)上都說 Go 語言字符串是不可變的,這是為什么呢? 這個問題本身并不困難,但對于新手來說確實容易產(chǎn)生困惑,今天就來回答一下。 首先來看看它的底層結構: 和切片的結構很像,只不過少了一個

    2024年02月14日
    瀏覽(98)
  • 【Golang】Golang進階系列教程--為什么 Go for-range 的 value 值地址每次都一樣?

    循環(huán)語句是一種常用的控制結構,在 Go 語言中,除了 for 以外,還有一個 range ,可以使用 for-range 循環(huán)迭代數(shù)組、切片、字符串、map 和 channel 這些數(shù)據(jù)類型。 但是在使用 for-range 循環(huán)迭代數(shù)組和切片的時候,是很容易出錯的,甚至很多老司機一不小心都會在這里

    2024年02月15日
    瀏覽(22)
  • golang判斷目錄是否存在和生成日志文件

    package main import ( ? ? \\\"fmt\\\" ? ? \\\"io\\\" ? ? \\\"os\\\" ? ? \\\"time\\\" ? ? \\\"github.com/sirupsen/logrus\\\" ) func main() { ? ? defer func() { ? ? ? ? err := recover() ? ? ? ? if err != nil { ? ? ? ? ? ? logrus.Info(err) ? ? ? ? } ? ? }() ? ? log_path := \\\"runtime/logs/\\\" ? ? _, err := os.Stat(log_path) ? ? if err != nil { ? ? ? ? i

    2024年02月16日
    瀏覽(27)
  • 【golang中的文件操作】

    您可以通過以下步驟來開始編寫您所需的代碼和注釋: 使用 os.Open() 函數(shù)可以打開一個文件,并返回一個 *os.File 類型的文件指針。您可以使用 defer 確保在函數(shù)結束時關閉文件。 使用 ioutil.ReadFile() 函數(shù)可以讀取整個文件的內(nèi)容,并將其作為字節(jié)切片返回。您可以使用

    2024年02月16日
    瀏覽(20)
  • Golang操作阿里云OSS上傳文件

    Golang操作阿里云OSS上傳文件

    為什么要使用OSS?應用場景是什么? 最近在開發(fā)考試系統(tǒng),里面需要上傳課件,課件包括pdf,map等等各種類型的文件,這些文件不能像圖片一樣,直接上傳到項目目錄下面,需要單獨存放,阿里云就提供了存儲方式,然后OSS是其中的一種,可以用來存儲一些文件。 我們需要

    2024年02月02日
    瀏覽(39)
  • Golang:文件讀寫操作WriteFile、ReadFile和0644權限

    Golang:文件讀寫操作WriteFile、ReadFile和0644權限

    方法簽名 示例代碼 關于 0644 權限,可以參考下圖 第0位:文件屬性?!?” 表示普通文件;“d” 表示是一個目錄 第1~3位:文件所有者的權限 第4~6位:文件所屬用戶組的權限 第7~9位:其他人的權限 參考 Go寫文件的權限 WriteFile(filename, data, 0644)? Golang 基礎之文件操作

    2024年04月28日
    瀏覽(19)
  • Golang實現(xiàn)SSH、SFTP等相關操作

    在日常的一些開發(fā)場景中,我們需要去和遠程服務器進行一些通信,執(zhí)行一些相關命令操作,這個時候我們就可以使用SSH協(xié)議實現(xiàn)目標。SSH協(xié)議是建立在應用層上的安全協(xié)議,全稱為Secure Shell,采用的是面向連接的TCP協(xié)議進行傳輸,也就意味著它是安全可靠的。需要注意的是

    2024年02月13日
    瀏覽(19)
  • Golang實現(xiàn)JAVA虛擬機-解析class文件

    Golang實現(xiàn)JAVA虛擬機-解析class文件

    原文鏈接:https://gaoyubo.cn/blogs/de1bedad.html 所需前置知識為:JAVA語言、JVM知識、Go筆記 對應項目:jvmgo 操作系統(tǒng):Windows 11 openjdk version \\\"1.8.0_382\\\" go version go1.21.0 windows/amd64 Java虛擬機的工作是運行Java應用程序。和其他類型的應用程序一樣,Java應用程序也需要一個入口點,這個入

    2024年02月04日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包