目录

文件

文件目录

文件目录操作

读取文件

一、方法一 (file.Read())

二、方法二 (bufio读取文件)

三、方法三 (ioutil 读取方法)

写入文件

一、方法一

二、方法二

三、方法三 (ioutil写入文件)

复制文件

一、方法一

二、方法二


文件

       Golang中,文件是指计算机存储数据实体文件可以是文本文件、二进制文件配置文件等。在Go语言中,通过操作文件我们可以读取文件内容写入数据到文件,以及获取文件的属性等。

Golang中的文件可以分为两种类型文本文件和二进制文件。文本文件是指只包含文本内容的文件,可以文本编辑打开进行查看编辑。而二进制文件是指除文本内容外还包含其他数据的文件,如图片音频视频等文件。

在Golang中,文件是以文件流的形式进行操作的,文件流是指将文件中的内容作为一个流来处理方式通过读取流来获取文件的内容通过写入流来向文件中写入数据。


文件目录

在Golang中,文件目录是指计算机文件系统中的文件夹目录目录用于组织和存储文件的一种方式可以包含文件和其他子目录

Golang中的文件目录操作基本概念主要涉及文件和目录的创建打开读取写入删除操作

文件路径:文件路径用于定位文件或目录的字符串。在Go语言中,可以使用绝对路径相对路径表示文件路径绝对路径是从根目录开始的完整路径,而相对路径相对当前工作目录的路径。

文件操作:在Go语言中,可以使用os包进行文件操作。常用的文件操作包括创建文件、打开文件、读取文件内容写入文件内容关闭文件等。

目录操作:同样在os包中,可以进行目录操作,如创建目录、删除目录、遍历目录等。常用的目录操作函数包括MkdirMkdirAllRemoveRemoveAllReadDir等。

文件信息:通过os包中的函数,可以获取文件的相关信息,如文件大小修改时间权限等。常用的文件信息函数包括StatFileInfo等。

文件读写:Go语言中的文件读写操作可以使用os包中的Open函数打开文件,然后使用ReadWrite方法读取写入文件内容。还可以使用bufio包提供的缓冲读写方式提高读写效率。

错误处理:在文件和目录操作过程中,可能会出现各种错误,如文件不存在权限不足等。在Go语言中,通过错误返回值处理这些错误,常用的处理方式包括检查错误值、使用defer语句关闭文件和使用log输出错误信息等。

文件删除:在Go语言中,可以使用os包中的Remove函数删除文件。需要注意的是,删除文件是一个可逆操作,谨慎使用。

总而言之,Go语言提供了丰富的文件和目录操作函数,可以方便地进行文件和目录的创建、打开读写和删除等操作。开发者可以根据具体需求使用这些函数处理文件和目录操作。


文件目录操作

读取文件

一、方法一 (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、创建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 文件权限,一个八进制数 r(读)04 w(写)02 x(执行)01

其中flag分为:

os.O_WRONLY 只写

os.O_CREATE 创建文件

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)) //写入字节切片数据

file.WriteString(“直接写入的字符串数据”) //直接写入的字符串数据

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("//直接写入的字符串数据")
}

 hello.go中就会被按要求追加

二、方法二

1、打开文件 file, err := os.OpenFile(“D:/GoLang/go_demo/helloworld/hello.go”, os.O_CREATE|os.O_APPEND, 0666)

2、创建writer对象 writer := bufio.NewWriter(file)

3、将数据写入缓存 writer.WriteString(“你好Golangn”)

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("//你好Golang" + strconv.Itoa(i) + "n")
	}
	writer.Flush()
}

按要求追加数据

三、方法三 (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 := "//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"
)

// 编写一个函数,接受两个文件路径 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 {
		//读取数据
		n, err := sFile.Read(tempSlice)
		if err == io.EOF {
			break
		}
		if err != nil {
			return err
		}
		//写入数据
		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)
	}
}

成功拷贝

原文地址:https://blog.csdn.net/weixin_71646897/article/details/130938740

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_24028.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注