在 Go 语言中,文件操作是基础技能之一,主要通过 os
、io
和 io/ioutil
等标准库完成。以下是对文件操作的全面介绍,帮助你在 Go 语言的“成神之路”上迈出关键一步!
1. 创建文件
使用 os.Create
创建文件,如果文件已存在会被清空。
示例代码
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.Create("example.txt")
if err != nil {
fmt.Println("Error creating file:", err)
return
}
defer file.Close()
file.WriteString("Hello, Go!")
fmt.Println("File created and written successfully.")
}
2. 打开文件
使用 os.Open
打开文件(只读模式),使用 os.OpenFile
可以指定模式。
示例代码
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
fmt.Println("File opened successfully.")
}
3. 写入文件
使用 file.Write
或 file.WriteString
写入数据。
示例代码
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.OpenFile("example.txt", os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
_, err = file.WriteString("\nAppended text.")
if err != nil {
fmt.Println("Error writing to file:", err)
return
}
fmt.Println("Text appended successfully.")
}
4. 读取文件
使用 os.ReadFile
一次性读取,或者使用 bufio.Scanner
分块读取。
示例代码 1:一次性读取
package main
import (
"fmt"
"os"
)
func main() {
data, err := os.ReadFile("example.txt")
if err != nil {
fmt.Println("Error reading file:", err)
return
}
fmt.Println("File content:")
fmt.Println(string(data))
}
示例代码 2:逐行读取
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("Error opening file:", 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 reading file:", err)
}
}
5. 删除文件
使用 os.Remove
删除文件。
示例代码
package main
import (
"fmt"
"os"
)
func main() {
err := os.Remove("example.txt")
if err != nil {
fmt.Println("Error deleting file:", err)
return
}
fmt.Println("File deleted successfully.")
}
6. 获取文件信息
使用 os.Stat
获取文件的元信息。
示例代码
package main
import (
"fmt"
"os"
)
func main() {
info, err := os.Stat("example.txt")
if err != nil {
fmt.Println("Error getting file info:", err)
return
}
fmt.Printf("File Name: %s\n", info.Name())
fmt.Printf("Size: %d bytes\n", info.Size())
fmt.Printf("Permissions: %s\n", info.Mode())
fmt.Printf("Last Modified: %s\n", info.ModTime())
fmt.Printf("Is Directory: %t\n", info.IsDir())
}
7. 重命名或移动文件
使用 os.Rename
可以重命名或移动文件。
示例代码
package main
import (
"fmt"
"os"
)
func main() {
err := os.Rename("example.txt", "renamed_example.txt")
if err != nil {
fmt.Println("Error renaming file:", err)
return
}
fmt.Println("File renamed successfully.")
}
8. 复制文件
Go 标准库没有直接的复制功能,可以通过读取和写入实现。
示例代码
package main
import (
"fmt"
"io"
"os"
)
func main() {
srcFile, err := os.Open("example.txt")
if err != nil {
fmt.Println("Error opening source file:", err)
return
}
defer srcFile.Close()
destFile, err := os.Create("copy_example.txt")
if err != nil {
fmt.Println("Error creating destination file:", err)
return
}
defer destFile.Close()
_, err = io.Copy(destFile, srcFile)
if err != nil {
fmt.Println("Error copying file:", err)
return
}
fmt.Println("File copied successfully.")
}
总结
通过熟练掌握上述操作,你可以实现对文件的创建、读取、写入、删除、重命名等全方位控制,为构建复杂的系统打下坚实的基础。继续深入学习并练习 Go 的文件操作,会让你在开发中更加得心应手!
发布者:myrgd,转载请注明出处:https://www.object-c.cn/5016