Go语学习笔记 - 文件操作,io/ioutil(三) | 从零开始Go语言

简介: Go语学习笔记 - 文件操作,io/ioutil(三) | 从零开始Go语言

接着上一篇,我们看看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))
}

文件内容和执行结果如下

image.png



<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())
  }
}

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


image.png


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

可以使用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)
}

执行结果如下截图所示


屏幕快照 2022-06-08 下午11.12.50.png



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


拷贝文件

使用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")
}

执行结果如下

image.png


小结

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


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


相关文章
|
2月前
|
存储 安全 测试技术
【Go语言精进之路】构建高效Go程序:了解map实现原理并高效使用
【Go语言精进之路】构建高效Go程序:了解map实现原理并高效使用
38 3
|
2月前
|
存储 监控 Go
【Go语言精进之路】构建高效Go程序:了解切片实现原理并高效使用
【Go语言精进之路】构建高效Go程序:了解切片实现原理并高效使用
43 3
|
2月前
|
程序员 Go
【Go语言精进之路】Go语言fmt包深度探索:格式化输入输出的利器
【Go语言精进之路】Go语言fmt包深度探索:格式化输入输出的利器
41 3
|
2月前
|
关系型数据库 MySQL Go
Go语言介绍以及如何在Go语言中操作MySQL数据库
Go语言介绍以及如何在Go语言中操作MySQL数据库
40 3
|
2月前
|
设计模式 安全 Go
【Go语言精进之路】构建高效Go程序:零值可用、使用复合字面值作为初值构造器
【Go语言精进之路】构建高效Go程序:零值可用、使用复合字面值作为初值构造器
21 2
|
2月前
|
存储 安全 Go
【Go语言精进之路】构建高效Go程序:掌握变量、常量声明法则与iota在枚举中的奥秘
【Go语言精进之路】构建高效Go程序:掌握变量、常量声明法则与iota在枚举中的奥秘
31 2
|
2月前
|
存储 安全 Java
【Go语言精进之路】Go语言基础:基础语法概览
【Go语言精进之路】Go语言基础:基础语法概览
33 0
|
2月前
|
存储 Go API
Go 语言基础之常用包【flag、time、strconv、io】(2)
Go 语言基础之常用包【flag、time、strconv、io】
|
2月前
|
存储 Unix Go
Go 语言基础之常用包【flag、time、strconv、io】(1)
Go 语言基础之常用包【flag、time、strconv、io】
|
1天前
|
安全 Java Go
探索Go语言在高并发环境中的优势
在当今的技术环境中,高并发处理能力成为评估编程语言性能的关键因素之一。Go语言(Golang),作为Google开发的一种编程语言,以其独特的并发处理模型和高效的性能赢得了广泛关注。本文将深入探讨Go语言在高并发环境中的优势,尤其是其goroutine和channel机制如何简化并发编程,提升系统的响应速度和稳定性。通过具体的案例分析和性能对比,本文揭示了Go语言在实际应用中的高效性,并为开发者在选择合适技术栈时提供参考。