文件操作1

文件,对我们并不陌生,文件是数据源(保存数据的地方)的一种,比如大家经常使用的Word文档,txt文件,excel文件...都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保存视频,声音...


文件在程序中是以流的形式来操作的。

流:数据在数据源(文件)和程序(内存)之间经历的路径

输入流:数据从数据源(文件)到程序(内存)的路径

输出流:数据从程序(内存)到数据源(文件)的路径

 

os.File封装所有文件相关操作,File是一个结构体。

os.File的各种绑定的方法在 官网的os包里的File结构体里。

操作文件,会经常使用到os.File结构体

 

打开和关闭文件:

常用的文件操作函数和方法:

1)打开一个文件进行读操作:
os.Open(name string) (*File, error)

2)关闭一个文件:
File.Close()

案例演示:

func main() {

  //打开文件
  //概念说明:file的叫法有三种:
  //1.file 叫 file对象
  //2.file 叫 文件句柄
  //3.file 叫 file指针
  file, err := os.Open("d:/hosts")
  if err != nil {
    fmt.Println("open file err=", err)
  }

  //输出下文件,看看文件是什么,看出file 就是一个指针 *file
  fmt.Printf("file=%v", file)

  //关闭文件
  err = file.Close()
  if err != nil {
    fmt.Println("close file err=", err)
  }
}

 

带缓冲的Reader读文件:

读文件操作应用实例:

1)读取文件的内容并显示在终端(带缓冲区的方式),使用os.Open,file.Close,bufio.NewReader(), reader.ReadString 函数和方法

package main
import (
  "fmt"
  "os"
  "bufio"
  "io"
)

 unc main() {

  //打开文件
  //概念说明:file的叫法有三种:
  //1.file 叫 file对象
  //2.file 叫 文件句柄
  //3.file 叫 file指针
  file, err := os.Open("d:/hosts")
  if err != nil {
    fmt.Println("open file err=", err)
  }

  //当函数退出时,要及时的关闭file
  defer file.Close() //要及时关闭file句柄,否则会有内存泄露

  //创建一个 *Reader,是带缓冲的
  /*
  const (
    defaultBufSize = 4096 //默认的缓冲区为4096
  )
  */
  reader := bufio.NewReader(file)
  //循环的读取文件的内容
  for {
    str, err := reader.ReadString('\n') //读到一个换行就结束
    if err == io.EOF { //io.EOF表示文件的末尾
      break
    }
    //输出内容
    fmt.Print(str)
  }

  fmt.Println("文件读取结束...")
}

一次性读取文件: 

读取文件的内容并显示在终端(使用ioutil一次将整个文件读入到内存中),这种方式适用于文件不大的情况。相关方法和函数(ioutil.ReadFile)

案例演示:

package main
import (
  "fmt"
  "io/ioutil"
)

func main() {

  //使用ioutil.ReadFile一次性将文件读取到位
  file := "d:/hosts"
  content, err := ioutil.ReadFile(file)
  if err != nil {
    fmt.Printf("read file err=%v", err)
  }
  //把读取到的内容显示到终端
  fmt.Printf("%v",string(content))
  //因为我们没有明确的显示的Open文件,因此也不需要显示的Close文件
  //因为,文件的Open和Close被封装到 ReadFile 函数内部
}

 

posted @ 2019-08-26 22:52  我是一只忙碌的小青蛙  阅读(239)  评论(0编辑  收藏  举报