ZBLOG

golang 读写文件

在 Go 语言中,读写文件是常见的操作。以下是几种常用的方法:


1. 读取文件

(1) 使用 ioutil.ReadFile(简单,适合小文件)

package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
	data, err := ioutil.ReadFile("test.txt")
	if err != nil {
		fmt.Println("读取文件失败:", err)
		return
	}
	fmt.Println(string(data))
}

注意ioutil.ReadFile 会一次性读取整个文件到内存,不适合大文件。

(2) 使用 os.Open + bufio.Scanner(逐行读取,适合大文件)

package main

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

func main() {
	file, err := os.Open("test.txt")
	if err != nil {
		fmt.Println("打开文件失败:", err)
		return
	}
	defer file.Close()

	scanner := bufio.NewScanner(file)
	for scanner.Scan() { // 逐行扫描
		fmt.Println(scanner.Text()) // 获取当前行内容
	}

	if err := scanner.Err(); err != nil {
		fmt.Println("读取错误:", err)
	}
}

2. 写入文件

(1) 使用 ioutil.WriteFile(覆盖写入)

package main

import (
    "io/ioutil"
)

func main() {
    content := []byte("Hello, Golang!")
    err := ioutil.WriteFile("output.txt", content, 0644) // 0644是文件权限(rw-r--r--)
    if err != nil {
        panic(err)
    }
}

(2) 使用 os.OpenFile(追加或自定义模式)

package main

import (
    "os"
)

func main() {
    file, err := os.OpenFile("output.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
    if err != nil {
        panic(err)
    }
    defer file.Close()

    _, err = file.WriteString("追加内容\n")
    if err != nil {
        panic(err)
    }
}

模式说明

  • os.O_APPEND:追加内容。
  • os.O_CREATE:如果文件不存在则创建。
  • os.O_WRONLY:只写模式。

3. 其他常见操作

(1) 检查文件是否存在

if _, err := os.Stat("file.txt"); os.IsNotExist(err) {
    fmt.Println("文件不存在")
}

(2) 复制文件

package main

import (
    "io"
    "os"
)

func CopyFile(src, dst string) error {
    source, err := os.Open(src)
    if err != nil {
        return err
    }
    defer source.Close()

    destination, err := os.Create(dst)
    if err != nil {
        return err
    }
	defer destination.Close()

   _,err = io.Copy(destination, source)
   returnerr 
}

funcmain(){
	err:=CopyFile( "source.txt", "dest.txt")
	iferr!=nil{
	   panic(err )
   } 
} 

总结

场景 推荐方法
快速读取小文件 ioutil.ReadFile
逐行读取大文件 bufio.Scanner
覆盖写入 ioutil.WriteFile
追加写入或复杂操作 os.OpenFile + Write相关方法

如果有更具体的需求(如并发读写、处理二进制文件等),可以进一步探讨!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23771

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?