详解Go语言中io/ioutil工具的使用

目录
  • 读取文件
  • 写文件
  • 读取文件夹下所有文件信息
  • 创建临时文件和临时文件夹
  • 拷贝文件
  • 小结

学习笔记,写到哪是哪。

接着上一篇,我们看看io/ioutil工具如何使用,简化文件操作。

读取文件

读取文件可以使用ReadAll方法或者ReadFile方法。

ReadAll方法样例代码如下

//读取文件ReadAll
func IoUtilRead1() {
    _file, _e := os.Open("./test.txt")
    if _e != nil {
        fmt.Println(_e)
        return
    }
    defer _file.Close()
    _text, _err := ioutil.ReadAll(_file)
    fmt.Println(_err)
    fmt.Println(string(_text))
}

文件内容和执行结果如下

<nil>
今天天气真好

Process finished with the exit code 0

ReadFile方法样例代码如下

//读取文件ReadFile
func IoUtilRead2() {
    _text, _err := ioutil.ReadFile("./test.txt")
    fmt.Println(_err)
    fmt.Println(string(_text))
}

执行结果如下

<nil>
今天天气真好

Process finished with the exit code 0

写文件

可以使用ioutil.WriteFile方法写文件。

样例代码如下

//写文件
func IoUtilWriteFile() {
    _err := ioutil.WriteFile("./test.txt", []byte("今天天气真好"), os.ModePerm)
    fmt.Println(_err)
}

注意方法还是要带入文件权限参数,文件如果不存在的话,会自动创建。但是不能追加文本内容,还是要注意一下。

读取文件夹下所有文件信息

可以使用ioutil.ReadDir方法读取目录下所有文件信息。

样例代码如下

//读取文件夹下的文件
func IoUtilReadDir() {
    fileInfoData, _err := ioutil.ReadDir(".")
    if _err != nil {
        fmt.Println(_err)
        return
    }
    for k, v := range fileInfoData {
        fmt.Printf("第%d个文件,名称%s,目录与否:%v\n", k, v.Name(), v.IsDir())
    }
}

输出文件编号、名称、是否为目录,执行结果截图如下

创建临时文件和临时文件夹

可以使用ioutil.TempFile和ioutil.TempDir来创建临时文件和临时文件夹。

样例代码如下

//创建临时文件和文件夹
func IoUtilTemp() {
    _file, _err := ioutil.TempFile(".", "test1.txt")
    if _err != nil {
        fmt.Println(_err)
        return
    }
    defer _file.Close()
    _n, _err1 := _file.WriteString("你是谁")
    if _err1 != nil {
        fmt.Println(_err1)
        return
    }
    fmt.Printf("字符:%d", _n)
    _dirName, _err2 := ioutil.TempDir(".", "output2")
    if _err2 != nil {
        fmt.Println(_err2)
        return
    }
    fmt.Printf("临时文件夹:%v\n", _dirName)
}

执行结果如下截图所示

临时文件和临时文件夹后面会带一串随机字符串。

拷贝文件

使用ioutil写了一个拷贝方法。

样例代码如下

//拷贝文件
func IoUtilCopyFile(srcFile, distFile string) (int, error) {
    _data, _err := ioutil.ReadFile(srcFile)
    if _err != nil {
        return 0, _err
    }
    _err = ioutil.WriteFile(distFile, _data, os.ModePerm)
    if _err != nil {
        return 0, _err
    }
    return len(_data), nil
}

func main() {
    IoUtilCopyFile("test.txt", "test1.txt")
}

执行结果如下

小结

总的来说,使用起来简单了不少,里面有使用到string与[]byte的转换,记录一下别忘了。

//string和[]byte之间的转换
func transforStringAndByte() {
    var str string = "今天天气真好"
    data := []byte(str)
    fmt.Println(len(data))
    str1 := string(data[:])
    fmt.Println(str1)
}

以上就是详解Go语言中io/ioutil工具的使用的详细内容,更多关于Go语言io/ioutil工具的资料请关注我们其它相关文章!

(0)

相关推荐

  • 深入解析Go语言的io.ioutil标准库使用

    今天我们讲解的是golang标准库里边的io/ioutil包–也就是package io/ioutil 1.ioutil.ReadDir(dirname string)这个函数的原型是这样的 func ReadDir(dirname string) ([]os.FileInfo, error) 不难看出输入的是dirname类型是string类型的 譬如"d:/go",然会是一个FileInfo的切片,其中FileInfo的结构是这样的 复制代码 代码如下: type FileInfo

  • Go语言中io包核心接口示例详解

    目录 前言 Reader Writer Closer Seeker 组合接口 总结 前言 IO 操作是我们在编程中不可避免会遇到的,例如读写文件,Go语言的 io 包中提供了相关的接口,定义了相应的规范,不同的数据类型可以根据规范去实现相应的方法,提供更加丰富的功能. Go 语言提倡小接口 + 接口组合的方式,来扩展程序的行为以及增加程序的灵活性.io代码包恰恰就可以作为这样的一个标杆,它可以成为我们运用这种技巧时的一个参考标准.io包中包含了大量接口,本篇文章我们就先来学习四个核心接口以及对应

  • 谈谈对Golang IO读写的困惑

    前言 Golang的IO读写提供了很多种方式,目前本人知道的有io库.os库.ioutil库.bufio库.bytes/strings库等. 虽然库多是一件好事,意味着选择性多,但让我困惑的一点是:什么场景下该用哪个库? 为什么? 在给出结论前,我先想给出Golang内置IO库的项目结构,主要方便理解和引用: # 只列举了核心的目录及文件 src: - bufio - bufio.go - bytes - buffer.go - reader.go - io - ioutil - ioutil.

  • 详解Go语言中io/ioutil工具的使用

    目录 读取文件 写文件 读取文件夹下所有文件信息 创建临时文件和临时文件夹 拷贝文件 小结 学习笔记,写到哪是哪. 接着上一篇,我们看看io/ioutil工具如何使用,简化文件操作. 读取文件 读取文件可以使用ReadAll方法或者ReadFile方法. ReadAll方法样例代码如下 //读取文件ReadAll func IoUtilRead1() { _file, _e := os.Open("./test.txt") if _e != nil { fmt.Println(_e)

  • 详解Go语言中Get/Post请求测试

    目录 gin安装 Get请求测试 Post请求测试 基础语法差不多了,需要开始实践到一下项目,先来web框架gin吧,做一个后端web服务. 在把项目搭建起来的过程中,我也要结合实际的工作经验,补充一些项目结构.开发组件上的理解. 项目地址:github地址 gin安装 先将gin安装一下,安装依赖go语言还是比较方便的. 在安装之前先配置一下goproxy. 命令如下: go env -w GO111MODULE=on go env -w GOPROXY=https://mirrors.ali

  • 详解C++语言中std::array的神奇用法

    概述 std::array是在C++11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与性能.也正因此,使得std::array有很多与其他容器不同的特殊之处,比如:std::array的元素是直接存放在实例内部,而不是在堆上分配空间:std::array的大小必须在编译期确定:std::array的构造函数.析构函数和赋值操作符都是编译器隐式声明的--这让很多用惯了std::vector这类容器的程序员不习惯,觉得std::array不好用.但实际上,std::array的威力

  • 详解go语言中sort如何排序

    目录 sort包源码解读 前言 如何使用 基本数据类型切片的排序 自定义Less排序比较器 自定义数据结构的排序 分析下源码 不稳定排序 稳定排序 查找 Interface 总结 参考 sort 包源码解读 前言 我们的代码业务中很多地方需要我们自己进行排序操作,go 标准库中是提供了 sort 包是实现排序功能的,这里来看下生产级别的排序功能是如何实现的. go version go1.16.13 darwin/amd64 如何使用 先来看下 sort 提供的主要功能 对基本数据类型切片的排序

  • 详解C语言中typedef和#define的用法与区别

    目录 一.typedef的用法 二.#define的用法 三.typedef与#define的区别 四.typedef的用途 用途一 用途二 用途三 用途四 五.typedef的陷阱 陷阱一 陷阱二 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,比如: typedef int INT; typedef (int*) pINT; typedef unsigned int uint32_t type

  • 详解C语言中return与exit的区别

    详解C语言中return与exit的区别 1,exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的.main函数结束时也会隐式地调用exit函数.exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流.关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建的临时文件.exit是结束一个进程,它将删除进程使用的内存空间,同时把错误信息返回父进程,而return是返回函数值并退出函数 2,return是语言级别的,它

  • 详解 Go 语言中 Map 类型和 Slice 类型的传递

    Map 类型 先看例子 m1: func main() { m := make(map[int]int) mdMap(m) fmt.Println(m) } func mdMap(m map[int]int) { m[1] = 100 m[2] = 200 } 结果是 map[2:200 1:100] 我们再修改如下 m2: func main() { var m map[int]int mdMap(m) fmt.Println(m) } func mdMap(m map[int]int) {

  • 详解C语言中Char型指针数组与字符数组的区别

    详解C语言中Char型指针数组与字符数组的区别 1.char 类型的指针数组:每个元素都指向一个字符串,指向可以改变 char *name[3] = { "abc", "def", "gbk" }; for(int i = 0 ; i < strlen(name); i ++){ printf("%s\n", *(name+i)); //printf("%s\n", name[i]); } //指向改

  • 详解Go语言中for range的"坑"

    前言 Go 中的for range组合可以和方便的实现对一个数组或切片进行遍历,但是在某些情况下使用for range时很可能就会被"坑",下面用一段代码来模拟下: func main() { arr1 := []int{1, 2, 3} arr2 := make([]*int, len(arr1)) for i, v := range arr1 { arr2[i] = &v } for _, v := range arr2 { fmt.Println(*v) } } 代码解析

  • 详解Golang语言中的interface

    interface是一组method签名的组合,interface可以被任意对象实现,一个对象也可以实现多个interface.任意类型都实现了空interface(也就是包含0个method的interface),空interface可以存储任意类型的值.interface定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口. go version go1.12 package main import ( "fmt" ) // 定义struct type Hu

随机推荐