文件操作2

 

创建文件并写入内容

写文件操作应用实例:

基本介绍:

func OpenFile(name string, flag int, perm FileMode) (file *File, err error)

说明:os.OpenFile 是一个更一般性的文件打开函数,它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。如果操作成功,返回的文件对象可用于I/O。如果出错,错误底层类型是*PathError。

 

 

基本应用实例-方式一

1)创建一个新文件,写入内容5句"hello, Gardon"

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

func main() {

  //1.打开文件 d:/abc.txt
  filePath := "d:/abc.txt"
  file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_CREATE, 0666)
  if err != nil {
    fmt.Printf("open file err=%v\n", err)
    return
  }

  //及时关闭file句柄,防止内存泄露
  defer file.Close()

  //准备写入5句"hello, Gardon"
  str := "hello, Gardon\r\n" // \n表示换行
  //写入时,使用带缓存的 *Writer
  writer := bufio.NewWriter(file)
  for i := 0; i < 5; i++ {
    writer.WriteString(str)
  }

  //因为writerhi带缓存,因此在调用WriterString方法时
  //内容是先写入到缓存的。所以需要调用Flush方法,将缓存的数据
  //真正写入到文件中,否则文件中会没有数据。
  writer.Flush()
}

 

写入文件的四种方式

2)打开一个存在的文件中,将原来的内容覆盖成新的内容10句 "你好,尚硅谷!"

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

func main() {

  //1.打开一个已经存在的文件 d:/abc.txt
  filePath := "d:/abc.txt"
  file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_TRUNC, 0666)
  if err != nil {
    fmt.Printf("open file err=%v\n", err)
    return
  }

  //及时关闭file句柄,防止内存泄露
  defer file.Close()

  str := "你好,尚硅谷!\r\n" // \n表示换行, \r也表示换行。有些编辑器认\r 有些认\n
  //写入时,使用带缓存的 *Writer
  writer := bufio.NewWriter(file)
  for i := 0; i < 10; i++ {
    writer.WriteString(str)
  }

  //因为writerhi带缓存,因此在调用WriterString方法时
  //内容是先写入到缓存的。所以需要调用Flush方法,将缓存的数据
  //真正写入到文件中,否则文件中会没有数据。
  writer.Flush()
}

3)打开一个存在的文件,在原来的内容追加内容 'ABC! ENGLISH!'

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

func main() {

  //1.打开一个已经存在的文件 d:/abc.txt
  filePath := "d:/abc.txt"
  file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_APPEND, 0666)
  if err != nil {
    fmt.Printf("open file err=%v\n", err)
    return
  }

  //及时关闭file句柄,防止内存泄露
  defer file.Close()

  str := "ABC! ENGLISH!\r\n" // \n表示换行
  //写入时,使用带缓存的 *Writer
  writer := bufio.NewWriter(file)
  for i := 0; i < 10; i++ {
    writer.WriteString(str)
  }
  writer.Flush()
}

4)打开一个存在的文件,将原来的内容读出显示在终端,并且追加5句"hello,北京!"

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

func main() {

  //1.打开一个已经存在的文件 d:/abc.txt
  filePath := "d:/abc.txt"
  file, err := os.OpenFile(filePath, os.O_RDWR | os.O_APPEND, 0666)
  if err != nil {
    fmt.Printf("open file err=%v\n", err)
    return
  }

  //及时关闭file句柄,防止内存泄露
  defer file.Close()

  //先读取原来文件的内容,并显示在终端
  reader := bufio.NewReader(file)
  for {
    str, err := reader.ReadString('\n')
    if err == io.EOF {
      break
    }
    //显示到终端
    fmt.Print(str)
  }

  str := "hello,北京!\r\n" // \n表示换行
  //写入时,使用带缓存的 *Writer
  writer := bufio.NewWriter(file)
  for i := 0; i < 5; i++ {
    writer.WriteString(str)
  }
  //因为writerhi带缓存,因此在调用WriterString方法时
  //内容是先写入到缓存的。所以需要调用Flush方法,将缓存的数据
  //真正写入到文件中,否则文件中会没有数据。
  writer.Flush()
}

使用os.OpenFile(), bufio.NewWriter(), *Writer的方法WriteString完成上面的任务。

 

posted @ 2019-09-19 19:40  我是一只忙碌的小青蛙  阅读(162)  评论(0编辑  收藏  举报