Published on 2022-07-29 23:48 in 分类: Golang with wushaoyu
分类: Golang

Golang 读写文件

Golang读写文件

       这里记录golang在读写操作文件时的一些方法,供后续查询使用;

       在读写文件时,此处记录3种方式来操作:

  1. 使用io/ioutils包来完成,主要为一次性读取和一次性写入
  2.  使用切片的方式,构建一个字节切片,将读入的内容放入其中,然后通过for循环写入
  3. 使用带缓冲的读取器bufio包操作,更便捷

一、读文件

文件打开模式

复制代码
const (
    O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件
    O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件
    O_RDWR   int = syscall.O_RDWR   // 读写模式打开文件
    O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部
    O_CREATE int = syscall.O_CREAT  // 如果不存在将创建一个新文件
    O_EXCL   int = syscall.O_EXCL   // 和O_CREATE配合使用,文件必须不存在
    O_SYNC   int = syscall.O_SYNC   // 打开文件用于同步I/O
    O_TRUNC  int = syscall.O_TRUNC  // 如果可能,打开时清空文件
)
复制代码

文件打开与关闭

func Create(name string) (file *File, err error) // 创建一个空文件,注意当文件已经存在时,会直接覆盖掉原文件,不会报错

func Open(name string) (file *File, err error) // 打开一个文件,注意打开的文件只能读,不能写

func OpenFile(name string, flag int, perm FileMode) (file *File, err error) // 以指定的权限打开文件

func (f *File) Close() error // 关闭文件,关闭后不可读写

二、使用ioutil包

复制代码
package main

import (
    "fmt"
    "io/ioutil"
)

func main() {
    //要求:将一个文件的内容全部读出并写入到另一个文件中,这2个文件已存在
    file1Path := "d:/abc.txt"
    file2Path := "d:/kkk.txt"
    data, err := ioutil.ReadFile(file1Path)
    if err != nil {
        fmt.Printf("read file err=%v\n",err)
        return 
    }

    err = ioutil.WriteFile(file2Path,data,0666)
    if err != nil {
        fmt.Printf("write file error=%v",err)
    }
}
复制代码

三、使用字节切片读取

复制代码
package main

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

func main() {
    file, _ := os.Open("d:/tmp.txt")

    var output bytes.Buffer
    for {
        buf := make([]byte, 5)   //长度为5的切片,读取内容为5则不会显示后面的内容,需要使用循环判断
        n, err := file.Read(buf)
        if err != nil {
            if err == io.EOF {
                break
            } else {
                fmt.Printf("Error:could read data from the pipe,%s\n", err)
return } }
// fmt.Printf("length(buf):%v,string(buf):%v\n", n, string(buf)) if n > 0 { output.Write(buf[:n]) //循环写入 } } fmt.Printf("%s\n", output.String()) }
复制代码

四、使用带缓冲的读取器

复制代码
package main

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

func main() {
    file, _ := os.Open("d:/tmp.txt")

    outputbuf := bufio.NewReader(file)
    output0, _, err := outputbuf.ReadLine()
    if err != nil {
        fmt.Printf("Error:could read data from the pipe,%s\n", err)
        return
    }
    fmt.Printf("%s\n", string(output0))
}
复制代码

 

posted @   wushaoyu  阅读(418)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示