go语言读写文件
【摘要】 Go语言提供了简单而强大的文件I/O操作功能,主要通过os和io/ioutil(Go 1.16+推荐使用os和io包)标准库实现。以下是Go语言中文件读写的基本操作: 读取文件 1. 读取整个文件import ( "fmt" "os")func main() { // 读取整个文件内容 content, err := os.ReadFile("example.txt"...
Go语言提供了简单而强大的文件I/O操作功能,主要通过os
和io/ioutil
(Go 1.16+推荐使用os
和io
包)标准库实现。以下是Go语言中文件读写的基本操作:
读取文件
1. 读取整个文件
import (
"fmt"
"os"
)
func main() {
// 读取整个文件内容
content, err := os.ReadFile("example.txt")
if err != nil {
panic(err)
}
fmt.Println(string(content))
}
2. 逐行读取文件
import (
"bufio"
"fmt"
"os"
)
func main() {
// 打开文件
file, err := os.Open("example.txt")
if err != nil {
panic(err)
}
defer file.Close() // 确保文件关闭
// 创建Scanner逐行读取
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil {
panic(err)
}
}
3. 使用bufio.Reader读取
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
panic(err)
}
defer file.Close()
reader := bufio.NewReader(file)
for {
line, err := reader.ReadString('\n')
if err != nil {
break // 到达文件末尾或出错
}
fmt.Print(line)
}
}
写入文件
1. 写入整个文件
import (
"os"
)
func main() {
content := []byte("Hello, Go!\nThis is a file writing example.")
// 写入文件(覆盖模式)
err := os.WriteFile("output.txt", content, 0644)
if err != nil {
panic(err)
}
}
2. 追加内容到文件
import (
"os"
)
func main() {
// 以追加模式打开文件
f, err := os.OpenFile("output.txt", os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644)
if err != nil {
panic(err)
}
defer f.Close()
if _, err := f.WriteString("This line is appended.\n"); err != nil {
panic(err)
}
}
3. 使用bufio.Writer写入
import (
"bufio"
"os"
)
func main() {
file, err := os.Create("output.txt")
if err != nil {
panic(err)
}
defer file.Close()
writer := bufio.NewWriter(file)
_, err = writer.WriteString("Hello, Go!\n")
if err != nil {
panic(err)
}
// 确保所有缓冲数据写入底层io.Writer
writer.Flush()
}
高级文件操作
1. 检查文件是否存在
import (
"os"
)
func fileExists(filename string) bool {
info, err := os.Stat(filename)
if os.IsNotExist(err) {
return false
}
return !info.IsDir()
}
2. 复制文件
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)
return err
}
3. 读取大文件(分块读取)
import (
"fmt"
"os"
)
func main() {
file, err := os.Open("largefile.dat")
if err != nil {
panic(err)
}
defer file.Close()
buffer := make([]byte, 1024*1024) // 1MB缓冲区
for {
n, err := file.Read(buffer)
if err != nil {
if err.Error() != "EOF" {
panic(err)
}
break
}
// 处理读取的数据
fmt.Printf("Read %d bytes\n", n)
}
}
注意事项
- 总是检查错误并适当处理
- 使用
defer
确保文件关闭 - 对于大文件,使用缓冲读取/写入
- 注意文件权限(
0644
等) - 在Windows和Unix系统上注意路径分隔符的差异
这些基本操作涵盖了Go语言中文件I/O的主要用例,可以根据具体需求进行调整和扩展。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)