文件操作
简介
在 Go 中,文件操作主要依赖以下几个标准库:
os
包:提供了底层的文件操作接口,比如打开、创建、读取、写入、删除文件等。io
包:提供了基本的 I/O 接口,通常与os
配合使用。ioutil
包(Go 1.16 之后推荐使用os
和io
):之前用于简化文件操作,现在功能被分散到其他包中。bufio
包:提供缓冲读写功能,适合处理大文件或需要高效读写的场景。
文件操作的核心是 os.File
类型,它代表一个打开的文件对象,通过它可以执行读取、写入等操作。
创建文件
func Create(name string) (*File, error)
- 作用:创建一个新文件,如果文件已存在,会清空原有内容。
- 参数
name
表示文件名称,也可以是文件路径,可以是相对路径,也可以是绝对路径。(例如:example.txt 或者 /path/example.txt)
- 返回值
- *File:返回一个文件对象,用于后续的文件读写操作。
- error:如果创建文件时发生错误,则返回错误信息;否则返回
nil
。
示例:
go
package main
import (
"fmt"
"os"
)
func main() {
// 使用 os 包的 Create 函数创建文件
file, err := os.Create("file.txt")
if err != nil {
fmt.Println("创建文件失败, Error:", err)
return
}
// 打印信息
fmt.Println(file.Name(), "文件创建成功!")
}
打开文件
func Open(name string) (*File, error)
- 作用:打开文件
- 参数
- name:文件路径
- 返回值
- *File:返回一个文件对象,用于后续的文件读写操作。
- error:如果打开文件时发生错误,则返回错误信息;否则返回
nil
。
示例:
go
package main
import (
"fmt"
"os"
)
func main() {
// 使用 os 包的 Open 函数打开文件
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("文件打开失败, Error:", err)
return
}
// 打印信息
fmt.Println(file.Name(), "文件打开成功!")
}
func OpenFile(name string, flag int, perm os.FileMode) (*File, error)
- 作用:打开文件
- 参数
- name:文件路径
- flag:打开文件的模式(os.O_RDONLY是只读|os.O_WRONLY是只写|os.O_RDWR是读写|os.O_CREATE是创建|os.O_APPEND是追加|os.O_TRUNC是清空)
- perm:文件权限,通常用八进制表示(如
0666
、0777
、0755
等)- 0 表示无权限
- 1 表示执行权限
- 2 表示写权限
- 4 表示读权限
- 7 表示所有权限
- 这些值的组合(如
6 = 4+2
表示读写权限)分别适用于文件拥有者、组成员和其他用户。
- 返回值
- *File:返回一个文件对象,用于后续的文件读写操作。
- error:如果打开文件时发生错误,则返回错误信息;否则返回
nil
。
示例:
go
package main
import (
"fmt"
"os"
)
func main() {
// 以只读方式打开文件
file1, err := os.Open("file.txt")
if err != nil {
fmt.Println("打开文件失败, Error:", err)
return
}
// 关闭文件
defer file1.Close()
// 打印信息
fmt.Println(file1.Name(), "文件打开成功!")
// 以读写方式打开文件
file2, err := os.OpenFile("file.txt", os.O_RDWR, 0666)
if err != nil {
fmt.Println("打开文件失败, Error:", err)
return
}
// 关闭文件
defer file2.Close()
// 打印信息
fmt.Println(file2.Name(), "文件打开成功!")
}
关闭文件
func (f *File) Close() error
- 作用:关闭文件
- 参数:无。
- 返回值
- error:如果关闭文件时发生错误,则返回错误信息;否则返回
nil
。
- error:如果关闭文件时发生错误,则返回错误信息;否则返回
示例:
go
package main
import (
"fmt"
"os"
)
func main() {
// 使用 os 包的 Open 函数打开文件
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("文件打开失败, Error:", err)
return
}
// 关闭文件
defer file.Close()
// 打印信息
fmt.Println(file.Name(), "文件打开成功!")
}
文件状态信息
func (f *File) Stat() (FileInfo, error)
- 作用:获取文件信息
- 参数:无。
- 返回值
- FileInfo:文件信息
- error:如果获取文件信息时发生错误,则返回错误信息;否则返回
nil
。
示例:
go
package main
import (
"fmt"
"os"
)
func main() {
// 使用 os 包的 Open 函数打开文件
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("文件打开失败, Error:", err)
return
}
// 关闭文件
defer file.Close()
// 获取文件信息
fileInfo, err := file.Stat()
if err != nil {
fmt.Println("获取文件信息失败, Error:", err)
return
}
// 打印文件信息
fmt.Println("文件名:", fileInfo.Name())
fmt.Println("文件大小:", fileInfo.Size())
fmt.Println("修改时间:", fileInfo.ModTime())
fmt.Println("文件权限:", fileInfo.Mode())
}
写入文件
在 Go 中,写入文件通常通过 os.File
的方法完成,比如 Write
、WriteString
等,或者借助 bufio
包实现高效写入。
func (f *File) Write(b []byte) (n int, err error)
- 作用:将字节切片
b
写入文件。 - 参数
- b:要写入的字节切片。
- 返回值
- n:成功写入的字节数。
- error:如果写入文件过程中发生错误,则返回错误信息;否则返回
nil
。
- 作用:将字节切片
示例:
go
package main
import (
"fmt"
"os"
)
func main() {
// 这里不能使用 os.Open 函数打开文件,只有读取文件权限
// 所以这里使用 os.OpenFile 函数打开文件,指定文件的开模式
// os.O_RDONLY:只读| os.O_WRONLY:只写| os.O_RDWR:读写| os.O_CREATE:创建| os.O_APPEND:追加| os.O_TRUNC:清空
file, err := os.OpenFile("example.txt", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
if err != nil {
fmt.Println("文件打开失败, Error:", err)
return
}
// 关闭文件
defer file.Close()
// 写入文件
n, err := file.Write([]byte("Hello, Go!"))
if err != nil {
fmt.Println("写入失败, Error:", err)
return
}
fmt.Printf("成功写入 %d 个字节\n", n)
}
func (f *File) WriteString(s string) (n int, err error)
- 作用:将字符串
s
写入文件。 - 参数
- s:要写入的字符串。
- 返回值
- n:成功写入的字节数。
- error:如果写入文件过程中发生错误,则返回错误信息;否则返回
nil
。
- 作用:将字符串
示例:
go
package main
import (
"fmt"
"os"
)
func main() {
// 打开文件,并指定文件的模式为只写、创建、清空
file, err := os.OpenFile("example.txt", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
if err != nil {
fmt.Println("文件打开失败, Error:", err)
return
}
// 关闭文件
defer file.Close()
// 写入文件
n, err := file.WriteString("Hello, Go!")
if err != nil {
fmt.Println("写入失败, Error:", err)
return
}
fmt.Printf("成功写入 %d 个字节\n", n)
}
func (f *File) WriteAt(b []byte, off int64) (n int, err error)
- 作用:在文件中指定位置
off
写入字节切片b
。 - 参数
- b:要写入的字节切片。
- off:要写入的位置。
- 返回值
- n:成功写入的字节数。
- error:如果写入文件过程中发生错误,则返回错误信息;否则返回
nil
。
- 作用:在文件中指定位置
示例:
go
package main
import (
"fmt"
"os"
)
func main() {
// 打开文件,并指定文件的模式为只写、创建
file, err := os.OpenFile("example.txt", os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
fmt.Println("文件打开失败, Error:", err)
return
}
// 关闭文件
defer file.Close()
// 写入文件
n, err := file.WriteAt([]byte("Go"), 7) // 从第7字节开始写入
if err != nil {
fmt.Println("写入失败, Error:", err)
return
}
fmt.Printf("成功写入 %d 个字节\n", n)
}
读取文件
文件复制
文件移动和重命名
文件删除
提示
文档正在更新中...