美文网首页
go包:ioutil(IO操作函数集)

go包:ioutil(IO操作函数集)

作者: 呦丶耍脾气 | 来源:发表于2023-03-23 22:18 被阅读0次

1.介绍

Go语言中,io包主要声明的是对I/O操作的基本接口,而io/ioutil包则实现了对应的方法,方便我们直接使用。

2.方法列表

方法名 描述
NopCloser Reader进行封装,返回一个ReadCloser
ReadAll Reader 进行读取, 直到发生错误或者遇到 EOF 为止, 然后返回被读取的数据。
ReadFile 读取指定文件的内容,并返回。
ReadDir 读取 指定的目录, 并返回排序后的目录列表(根据名称排序)
TempDir 在指定目录新创建一个临时目录, 并返回该目录的路径
TempFile 在指定目录新创建一个临时文件, 以可读写的方式打开它, 并返回 *os.File 指针
WriteFile 将给定的数据 写入到指定文件里面。

如果文件不存在, 则去创建它;
如果文件已经存在, 则再写入之前会先清空文件中已有的内容。 |

3.ReadAll

3.1 方法签名

func ReadAll(r io.Reader) ([]byte, error) 

ReadAllr读取数据直到EOFerror,返回读取内容([]byte)和错误(error)。读取成功时err返回nil。因为本函数定义为读取r直到EOF,它不会将读取返回的EOF视为应报告的错误。

3.2 使用

func main() {
    // NewReader创建一个从s读取数据的Reader。本函数类似bytes.NewBufferString
    reader := strings.NewReader("Hello word !")
    all, err := ioutil.ReadAll(reader)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("%s",all)
}
// 输出: Hello word !

4.ReadFile

4.1 方法签名

func ReadFile(filename string) ([]byte, error) 

ReadFilefilename指定的文件中读取内容并返回。读取成功时err返回nil。因为本函数定义为读取r直到EOF,它不会将读取返回的EOF视为应报告的错误。

4.2 使用

func main() {
   // 文件路径
   fileName := "./test.log"
   data, err := ioutil.ReadFile(fileName)
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Printf("%s",data)
}

5.ReadDir

5.1 方法签名

func ReadDir(dirname string) ([]os.FileInfo, error) 

返回dirname指定的目录的目录信息的有序列表。

5.2 使用

func main() {
    dirName := "./log"
    dirList, err := ioutil.ReadDir(dirName)
    if err != nil {
        fmt.Println(err)
        return
    }
    for _, info := range dirList {
        fmt.Println(info.Name())
    }
}
/**输出
d1
test.log
*/
image.png

6.TempDir

6.1 方法签名

func TempDir(dir, pattern string) (name string, err error)

dir目录里创建一个新的、使用pattern作为前缀的临时文件夹,并返回文件夹的路径。

  • 如果dir是空字符串,TempDir使用默认用于临时文件的目录。
  • 不同程序同时调用该函数会创建不同的临时目录,
  • 创建的临时文件夹时在不使用时,需要删除。

6.2 使用

func main() {
    var pathList []string
    for i := 0; i < 4; i++ {
        var path string
        var err error
        switch i {
        case 0:
            // 指定目录和前缀
            path, err = ioutil.TempDir("./log","tmp_")
        case 1:
            // 只指定目录
            path, err = ioutil.TempDir("./log","")
        case 2:
            // 目录为空、前缀不为空
            path, err = ioutil.TempDir("","tmp_")
        case 3:
            // 目录和前缀都是空
            path, err = ioutil.TempDir("","")
        }
        if err != nil {
            fmt.Println(err)
            continue
        }
        pathList = append(pathList, path)
    // 删除临时目录,测试时注释
        // _ = os.RemoveAll(path)
    }
    fmt.Println(pathList)
}
/**输出
[log/tmp_984088491 log/346734350 /var/folders/8f/vnx2y1h57nzbd2p4vtcl6hv80000gn/T/tmp_561537301 /var/folders/8f/vnx2y1h57nzbd2p4vtcl6hv80000gn/T/840593776]
*/

7.TempFile

7.1 方法签名

func TempFile(dir, pattern string) (f *os.File, err error)

dir目录下创建一个新的、使用pattern为前缀的临时文件,以读写模式打开该文件并返回os.File指针。

  • 如果dir是空字符串,TempFile使用默认用于临时文件的目录。
  • 不同程序同时调用该函数会创建不同的临时文件。
  • 创建的临时文件夹时在不使用时,需要删除。

7.2 使用

func main() {
    var fileList []string
    for i := 0; i < 4; i++ {
        var file *os.File
        var err error
        switch i {
        case 0:
            // 指定目录和前缀
            file, err = ioutil.TempFile("./log", "tmp_")
        case 1:
            // 只指定目录
            file, err = ioutil.TempFile("./log", "")
        case 2:
            // 目录为空、前缀不为空
            file, err = ioutil.TempFile("", "tmp_")
        case 3:
            // 目录和前缀都是空
            file, err = ioutil.TempFile("", "")
        }
        if err != nil {
            fmt.Println(err)
            continue
        }
        fileList = append(fileList, file.Name())
        //删除
        //_ = os.Remove(file.Name())
    }
    fmt.Println(fileList)
}
/**输出
[log/tmp_598309912 log/983448727 /var/folders/8f/vnx2y1h57nzbd2p4vtcl6hv80000gn/T/tmp_134984970 /var/folders/8f/vnx2y1h57nzbd2p4vtcl6hv80000gn/T/246937825]
*/

8.WriteFile

8.1 方法签名

func WriteFile(filename string, data []byte, perm os.FileMode) error

函数向filename指定的文件中写入数据。

  • 如果文件不存在,将按给出的权限创建文件,
  • 如果文件存在,在写入数据之前清空文件。

8.2 使用

func main() {
    fileName := "./test.txt"
    for i := 0; i < 3; i++ {
        _ = ioutil.WriteFile(fileName, []byte("Hello Word!"), os.ModePerm)
    }
    fmt.Println("end")
}

相关文章

  • go基础——IO

    内容 1 io 接口2 ioutil3 文件读取 io接口 golang io包里封装了操作IO基本原语的接口,主...

  • io/ioutil包

    ioutil包提供给外部使用的一共有1个变量,7个方法。其中变量Discard是io.Write接口类型,调用该变...

  • GO: 文件以及文件夹操作

    获取目录中所有文件 使用包: io/ioutil 使用方法:ioutil.ReadDir读取目录 dirname ...

  • golang中文件以及文件夹路径相关操作

    获取目录中所有文件 使用包:io/ioutil 使用方法:ioutil.ReadDir读取目录 dirmane 中...

  • Go IO

    ioutil包使用 这个包里面包含了操作文件,文件夹的相关函数 ReadAll函数 该函数读取r中的所有数据,不会...

  • Golang包 ——io/ioutil

  • 文件复制

    1.使用io包: 2.使用os包循环遍历读取写入: 3.使用ioutil包:

  • 文件读写

    io/ioutil

  • Golang学习 - io/ioutil 包

    // Discard 是一个 io.Writer 接口,调用它的 Write 方法将不做任何事情// 并且始终成功...

  • golang ioutil基本使用

    1.ioutil实现一些I / O实用方法。 import "io/ioutil" var Discard io....

网友评论

      本文标题:go包:ioutil(IO操作函数集)

      本文链接:https://www.haomeiwen.com/subject/wtcvrdtx.html