zoukankan      html  css  js  c++  java
  • 文件操作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(' ') //读到一个换行就结束
        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 函数内部
    }

  • 相关阅读:
    创建进程
    进程
    操作系统历史
    socket
    网络基础
    常用模块二:hashlib、configparser、logging
    常见正则匹配
    类中的内置方法(魔法方法、双下方法)
    反射、isinstance和issubclass
    封装、继承、多态
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11415579.html
Copyright © 2011-2022 走看看