美文网首页
go读写文件

go读写文件

作者: 岑吾 | 来源:发表于2021-12-19 20:05 被阅读0次

读取文件

读取文件一般有三种方式,不同读取模式的优缺点不同。

  • 将文件整个读入内存。效率比较高,占用内存也最高
  • 按字节读取。读取方式比较灵活,若文件较大,可以读取需要的部分
  • 按行读取。一般用于文件日志文件读取

将文件整个读入内存

package main

import (
   "os"
   "io/ioutil"
   "fmt"
)

func main() {
   filepath := "./log.txt"
   content ,err :=ioutil.ReadFile(filepath)
   if err !=nil {
      panic(err)
   }
   fmt.Println(string(content))
}

按字节读取

package main

import (
   "fmt"
   "io"
   "os"
)

func main() {

   file := "./log.txt"
   f, err := os.Open(file)
   if err != nil {
      panic(err)
   }
   defer f.Close()

   chunks := make([]byte, 0)
   buf := make([]byte, 1024)
   for {
      n, err := f.Read(buf)
      if err != nil && err != io.EOF {
         panic(err)
      }
      if 0 == n {
         break
      }
      chunks = append(chunks, buf[:n]...)
   }
   fmt.Println(string(chunks))
}

按字行读取

package main

import (
"bufio"
"fmt"
"io"
"io/ioutil"
"os"
"strings"
)

func main() {
    filepath := "./log.txt"
    file, err := os.OpenFile(filepath, os.O_RDWR, 0666)
    if err != nil {
        fmt.Println("Open file error!", err)
        return
    }
    defer file.Close()

    stat, err := file.Stat()
    if err != nil {
        panic(err)
    }
    var size = stat.Size()
    fmt.Println("file size=", size)

    buf := bufio.NewReader(file)
    for {
        line, err := buf.ReadString('\n')
        line = strings.TrimSpace(line)
        fmt.Println(line)
        if err != nil {
            if err == io.EOF {
                fmt.Println("File read ok!")
                break
            } else {
                fmt.Println("Read file error!", err)
                return
            }
        }
    }
}

写入文件

写入文件一般分为二种:

  • 写入整个文件,如果文件存在覆盖,不存在创建
  • 在文件尾部添加内容,一般用于日志流等

写入整个文件

package main

import (
   "io/ioutil"
)

func main() {

   content := []byte("guoke\nzngw2\n")
   err := ioutil.WriteFile("test.txt", content, 0644)
   // 注意,如果写入的目录不存在会报错
   if err != nil {
      panic(err)
   }
}

在文件尾部添加内容

package main

import (
"fmt"
"io"
"os"
)

func checkFileIsExist(filename string) bool {
    if _, err := os.Stat(filename); os.IsNotExist(err) {
        return false
    }
    return true
}
func main() {
    var wireteString = "guoke\nzngw2\n"
    var filename = "./test.txt"
    var f *os.File
    var err1 error
    if checkFileIsExist(filename) { //如果文件存在
        f, err1 = os.OpenFile(filename, os.O_APPEND, 0666) //打开文件
        fmt.Println("文件存在")
    } else {
        f, err1 = os.Create(filename) //创建文件
        fmt.Println("文件不存在")
    }
    defer f.Close()
    n1, err1 := io.WriteString(f, wireteString) //写入文件(字符串)
    if err1 != nil {
        panic(err1)
    }
    fmt.Println("写入 %d 个字节", n1)

    n2, err2 := f.Write([]byte(wireteString)) //写入文件(字节)
    if err2 != nil {
        panic(err1)
    }
    fmt.Println("写入 %d 个字节", n2)
}

相关文章

  • 第05天(异常、文本文件处理)_04

    15_设备文件的使用.go 16_文件的读写.go 17_拷贝文件.go 课堂笔记

  • go读写文件

    读取文件 读取文件一般有三种方式,不同读取模式的优缺点不同。 将文件整个读入内存。效率比较高,占用内存也最高 按字...

  • Golang文件读写

    参考 Go实战--golang中读写文件的几种方式 读文件 读取的文件放在file/test:也就是file包下的...

  • golang 读取文件的四种方式

    参考 Go实战--golang中读写文件的几种方式 读文件 读取的文件放在file/test:也就是file包下的...

  • Go语言入门【四】:源码学习-io

    介绍 package io主要包含以下文件: io.go 基础的io操作,如读写,较底层 multi.go 多...

  • Golang 文件操作

    参考Golang文件操作整理golang中的文件读写 一、API 参考Go语言学习笔记(五)文件操作 1.os.F...

  • Go标准库之读写文件(File)

    Go标准库之读写文件(File) 创建一个空文件 获取文件的信息 重命名和移动文件 删除文件 打开关闭文件 打开文...

  • Go标准库之读写文件(File)

    Go标准库之读写文件(File) 创建一个空文件 获取文件的信息 重命名和移动文件 删除文件 打开关闭文件 打开文...

  • golang操作文件

    用习惯了python, 用go的文件读写,觉得还是有点别扭。先总结下来,后面用的时候,可以查看。 文件读操作 os...

  • C语言读写文件

    C语言文件读写### 标准文件读写 非标准文件读写 标准文件读写 头文件 include 打开文件 函数原型:FI...

网友评论

      本文标题:go读写文件

      本文链接:https://www.haomeiwen.com/subject/snvofrtx.html