首页 > 其他分享 >【go】 golang 的文件写入和读取(Write()、WriteString(),bufio包:WriteString()、flush(), ioutil 包:WriteFile()、ReadFi

【go】 golang 的文件写入和读取(Write()、WriteString(),bufio包:WriteString()、flush(), ioutil 包:WriteFile()、ReadFi

时间:2022-10-17 10:33:44浏览次数:59  
标签:ioutil info WriteString err Write func path os string

1. os包

1.1 Write()/WriteString()方法

语法

打开文件

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

写入

func (f *File) WriteString(s string) (n int, err error)

func (f *File) Write(b []byte) (n int, err error)

完整示例

package main

import (
    "fmt"
    "os"
)

func main() {
    info := "# 人员名单\r\n- 刘备刘玄德\r\n- 关羽关云长\r\n- 张飞张翼德"
    path := "nameList.md"
    writeFile(info,path)
    //readFile(path)
}

func writeFile(info string,path string) {

    fi, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0664)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer fi.Close()

    _,err = fi.WriteString(info)
    if err != nil {
        return
    }

    //_,err = fi.Write([]byte(info))
    //if err != nil {
    //    return
    //}
}

显示结果

 

1.2 Read()方法

语法

func (f *File) Read(b []byte) (n int, err error)

完整示例

package main

import (
    "fmt"
    "os"
)

func main() {
    //info := "# 人员名单\r\n- 刘备刘玄德\r\n- 关羽关云长\r\n- 张飞张翼德"
    path := "nameList.md"
    //writeFile(info,path)
    readFile(path)
}

func readFile(path string) {

    fi, err := os.Open(path)
    if err != nil {
        fmt.Println( err)
        return
    }
    defer fi.Close()

    var tmp = make([]byte, 100)
    n,err := fi.Read(tmp)
    if err != nil {
        return
    }
    fmt.Printf("%s",tmp[:n])

}

结果显示

# 人员名单
- 刘备刘玄德
- 关羽关云长
- 张飞张翼德

2. bufio包

2.1 WriteString()/flush()方法

语法

创建writer实例

func NewWriter(w io.Writer) *Writer

将信息写入缓存

func (b *Writer) WriteString(s string) (int, error)

将缓冲写入文件

func (b *Writer) Flush() error

完整示例

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

func main() {
    info := "# 人员名单\r\n- 刘备刘玄德\r\n- 关羽关云长\r\n- 张飞张翼德"
    path := "nameList.md"
    writeFile(info,path)
}

func writeFile(path string,info string) {
    fi, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0664)
    if err != nil {
        fmt.Println( err)
        return
    }
    defer fi.Close()
    //创建新Writer,其缓冲区有默认大小
    writer := bufio.NewWriter(fi)
    //将信息写入缓存
    _,err = writer.WriteString(info)
    if err != nil {
        return
    }
    //将缓存数据写入文件
    err = writer.Flush()
    if err != nil {
        return
    }
}

2.2 ReadLine()方法

语法

打开文件

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

创建reader

func NewReader(rd io.Reader) *Reader

读取结果

func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error)

完整示例

package main

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

func main() {
    //info := "# 人员名单\r\n- 刘备刘玄德\r\n- 关羽关云长\r\n- 张飞张翼德"
    path := "nameList.md"
    //writeFile(info,path)
    readFile(path)
}

func readFile(path string) {
    fi, err := os.OpenFile(path,os.O_RDONLY,0664)
    if err != nil {
        fmt.Printf("Error: %s\n", err)
        return
    }
    defer fi.Close()
    reader := bufio.NewReader(fi)
    for {
        lineString, _,err := reader.ReadLine()
        if err == io.EOF {
            break
        }
        fmt.Println(string(lineString))
    }
}

结果

# 人员名单
- 刘备刘玄德
- 关羽关云长
- 张飞张翼德

3. ioutil 包

3.1 WriteFile()

语法

func WriteFile(filename string, data []byte, perm fs.FileMode) error

完整示例

package main

import (
    "fmt"
    "io/ioutil"
)

func main() {
    info := "# 人员名单\r\n- 刘备刘玄德\r\n- 关羽关云长\r\n- 张飞张翼德"
    path := "nameList.md"
    writeFile(info,path)
}

func writeFile(info string,path string,) {
    err := ioutil.WriteFile(path,[]byte(info), 0664)
    if err != nil {
        fmt.Println(err)
        return
    }
}

3.2 ReadFile()

func ReadFile(filename string) ([]byte, error)

完整示例

package main

import (
    "fmt"
    "io/ioutil"
)

func main() {
    //info := "# 人员名单\r\n- 刘备刘玄德\r\n- 关羽关云长\r\n- 张飞张翼德"
    path := "nameList.md"
    readFile(path)
}

func readFile(path string,) {
    info,err := ioutil.ReadFile(path)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("%s",info)
}

结果

# 人员名单
- 刘备刘玄德
- 关羽关云长
- 张飞张翼德

 

标签:ioutil,info,WriteString,err,Write,func,path,os,string
From: https://www.cnblogs.com/opensmarty/p/16798249.html

相关文章

  • nginx配置文件rewrite和if
    nginx配置文件rewrite和ifrewrite语法:rewriteregexreplacementflag;,如:rewrite^/images/(.*\.jpg)$/imgs/$1break;此处的$1用于引用(.*.jpg)匹配到的内容,又如:re......
  • nginx配置文件rewrite和if
    nginx配置文件rewrite和ifrewrite语法:rewriteregexreplacementflag;,如:rewrite^/images/(.*\.jpg)$/imgs/$1break;此处的$1用于引用(.*.jpg)匹配到的内容,又如:re......
  • C#使用StreamReader类和StreamWriter类读写文本文件
    StreamReader类和StreamWriter类可以实现读写文本文件,这两个类都在命名空间System.IO下。usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usi......
  • Nginx rewrite 的last、break、redirect、permanent区别
    Nginxrewrite的last、break、redirect、permanent有四种模式: last和break都会跳转的rewrite的地址,区别是:last跳转后,会重新发起请求再匹配一次location,而break则只......
  • Linux系统编程07-read和write
    read和write函数#include<unistd.h>ssize_tread(intfd,void*buf,size_tcount);参数:fd:文件描述符,open得到的,用来操作某个文件buf:要读取数据......
  • 【Vegas原创】Livewriter不能连接博客园的解决办法
    报错现象: 解决方法:1,日志网址上面,随便输入一个字符,比如:a,下一步2,手动配置日志类型:a)在“Typeof weblogthatyouareusing”中选择“Custom(MetaweblogAPI)”。b)“......
  • 【Vegas原创】OpenLiveWriter代码插件
    1.下载插件: OpenLiveWriter.CNBlogs.SourceCode.zip2.解压,将dll文件复制到C:\Users\vegas\AppData\Local\OpenLiveWriter\app-0.6.2\Plugins路径下3.重新打开openLiv......
  • HtmlTextWriter学习笔记
    这两天正好在研究asp.net自定义控件制作,HtmlTextWriter在控件制作中发挥重要作用,能够帮助我快速生成html语句。因此决定写下笔记,方便以后查阅。HtmlTextWriter的名称空间是S......
  • Vue系列---【at Socket.writeAfterFIN [as write] (net.js:441:14) at PoolWorker
    1.问题描述:前端是vue项目,打包和打镜像的时候,本地没问题,jenkins物理机打流水线也没问题,但是到容器云平台使用自带的流水线打包打镜像的时候,就报错了。上次成功上线的代......
  • BUUCTF-PWN-第一页writep(32题)
    温故而知新,可以为师矣。所以花了几天时间重新做了下buuctf的pwn题,先发下第一页共32题的题解。还有如果题解都很详细那么本文就太长了,写起来也浪费时间,所以比较简单......