暂无分类
暂无标签
发布于2023-06-20 21:24 阅读(386) 评论(0) 点赞(9) 收藏(3)
目录
Golang中,文件是指计算机中存储数据的实体,文件可以是文本文件、二进制文件、配置文件等。在Go语言中,通过操作文件,我们可以读取文件的内容,写入数据到文件,以及获取文件的属性等。
Golang中的文件可以分为两种类型:文本文件和二进制文件。文本文件是指只包含文本内容的文件,可以用文本编辑器打开进行查看和编辑。而二进制文件是指除文本内容外还包含其他数据的文件,如图片、音频、视频等文件。
在Golang中,文件是以文件流的形式进行操作的,文件流是指将文件中的内容作为一个流来处理的方式,通过读取流来获取文件的内容,通过写入流来向文件中写入数据。
在Golang中,文件目录是指计算机文件系统中的文件夹或目录。目录是用于组织和存储文件的一种方式,可以包含文件和其他子目录。
Golang中的文件目录操作基本概念主要涉及文件和目录的创建、打开、读取、写入、删除等操作。
文件路径:文件路径是用于定位文件或目录的字符串。在Go语言中,可以使用绝对路径或相对路径来表示文件路径。绝对路径是从根目录开始的完整路径,而相对路径是相对于当前工作目录的路径。
文件操作:在Go语言中,可以使用os
包进行文件操作。常用的文件操作包括创建文件、打开文件、读取文件内容、写入文件内容和关闭文件等。
目录操作:同样在os
包中,可以进行目录操作,如创建目录、删除目录、遍历目录等。常用的目录操作函数包括Mkdir
、MkdirAll
、Remove
、RemoveAll
和ReadDir
等。
文件信息:通过os
包中的函数,可以获取文件的相关信息,如文件大小、修改时间、权限等。常用的文件信息函数包括Stat
和FileInfo
等。
文件读写:Go语言中的文件读写操作可以使用os
包中的Open
函数打开文件,然后使用Read
和Write
方法来读取和写入文件内容。还可以使用bufio
包提供的缓冲读写方式来提高读写效率。
错误处理:在文件和目录操作过程中,可能会出现各种错误,如文件不存在、权限不足等。在Go语言中,通过错误返回值来处理这些错误,常用的处理方式包括检查错误值、使用defer
语句关闭文件和使用log
包输出错误信息等。
文件删除:在Go语言中,可以使用os
包中的Remove
函数删除文件。需要注意的是,删除文件是一个不可逆操作,谨慎使用。
总而言之,Go语言提供了丰富的文件和目录操作函数,可以方便地进行文件和目录的创建、打开、读写和删除等操作。开发者可以根据具体需求使用这些函数来处理文件和目录操作。
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)) //强制类型转换
- }

成功读取到了文件的地址
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.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("你好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("//你好Golang" + strconv.Itoa(i) + "\n")
- }
- writer.Flush()
- }

按要求追加数据
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)
- }
- }

成功拷贝
作者:hhbnn
链接:http://www.phpheidong.com/blog/article/546643/d440c5b50cec03f05a0a/
来源:php黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 php黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-4
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!