在 Go 语言中,读写文件主要涉及到 os 和 io 两个包。os 包用于打开、关闭、读取和写入文件,而 io 包提供了一些实用的读写函数。
读取文件
打开一个文件并读取其内容可以使用 os.Open 和 io.ReadAll 函数。
package main
import (
"fmt"
"io"
"os"
)
func main() {
file, err := os.Open("test.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
defer file.Close()
content, err := io.ReadAll(file)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(string(content))
}
在上述代码中,我们首先使用 os.Open 打开一个文件。然后,使用 io.ReadAll 读取文件的全部内容。最后,我们将读取到的内容转换为字符串并打印出来。
写入文件
写入文件可以使用 os.Create 和 os.File.Write 函数。
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.Create("test.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
defer file.Close()
_, err = file.Write([]byte("Hello, World!\n"))
if err != nil {
fmt.Println("Error:", err)
return
}
}
在上述代码中,我们首先使用 os.Create 创建一个新文件。然后,使用 os.File.Write 方法写入字符串 "Hello, World!"。注意,os.File.Write 方法接受一个 []byte,所以我们需要首先将字符串转换为 []byte。
行读取
如果你需要逐行读取文件,可以使用 bufio.Scanner。
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.Open("test.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil {
fmt.Println("Error:", err)
}
}
在上述代码中,我们创建了一个 bufio.Scanner,然后使用 Scanner.Scan 方法逐行读取文件。每次调用 Scanner.Scan 都会读取下一行,直到文件结束。
总的来说,Go 语言提供了灵活强大的文件读写功能,可以应对各种不同的需求。 推荐阅读: