在本教程中,您将学习使用 os.File 的最基本技术。在 Go 中有几种方法可以用于文件操作。在本教程中,您将学习如何使用 Golang 创建、编辑、读取和删除文件。
在 Go 中创建文件非常容易,只需调用 os.Create() 函数,然后输入您想要创建的文件的路径作为参数。如果待创建的文件已存在,它将被覆盖。可以使用 os.IsNotExist() 来检测文件是否已被创建。
package main
import (
"fmt"
"os"
)
var path = "C:/Users/Desktop/Golang/Tutorials/test.txt"
func isError(err error) bool {
if err != nil {
fmt.Println(err.Error())
}
return (err != nil)
}
func createFile() {
// detect if the file already exists
var _, err = os.Stat(path)
// create a new file if it doesn't already exist
if os.IsNotExist(err) {
var file, err = os.Create(path)
if isError(err) {
return
}
defer file.Close()
}
fmt.Println("==> file created successfully", path)
}
func main() {
createFile()
}
输出
PS C:\Users\Desktop\Golang> go run file.go ==> file created successfully C:/Users/Desktop/Golang/Tutorials/test.txt PS C:\Users\Desktop\Golang>
os.Stat() 函数返回两个数据,即关于被搜索路径的信息和一个错误(如果有)。将函数的返回错误作为 os.IsNotExist() 函数的参数,以检测待创建的文件是否已存在。如果不存在,该函数将返回 true。
os.Create() 函数用于在指定路径创建文件。该函数返回相应文件的 *os.File 对象。新创建的文件状态自动为打开,因此在文件不再使用后需要使用 file.Close() 方法关闭它。
当文件不再使用时保持其打开状态不是一个好习惯,因为它会影响内存和对文件本身的访问。只要文件状态仍为打开或未关闭,文件将被锁定,从而无法被其他进程使用。
要编辑文件,首先需要以写访问级别打开一个文件。获取文件对象后,使用 WriteString() 方法填充数据。最后,调用 Sync() 方法保存更改。
package main
import (
"fmt"
"os"
)
var path = "C:/Users/Desktop/Golang/Tutorials/test.txt"
func writeFile() {
// open file with access level READ & WRITE
var file, err = os.OpenFile(path, os.O_RDWR, 0644)
if err != nil {
panic(err)
}
defer file.Close()
// write data to file
_, err = file.WriteString("hello\n")
if err != nil {
panic(err)
}
_, err = file.WriteString(" golang\n")
if err != nil {
panic(err)
}
// save changes
err = file.Sync()
if err != nil {
panic(err)
}
fmt.Println("==> file successful")
}
func main() {
writeFile()
}
输出
PS C:\Users\Desktop\Golang> go run file.go ==> file successful

在上面的程序中,文件以读写访问级别和权限代码 0664 打开。之后,使用 WriteString() 将一些字符串输入到文件中。最后,通过调用 Sync() 保存对文件的所有更改。
要读取的文件必须首先使用 os.OpenFile() 函数以最低为读的访问级别打开。之后,使用 Read() 方法,其参数是一个变量,读取过程的结果将保存到该变量中。
package main
import (
"fmt"
"io"
"os"
)
var path = "C:/Users/Desktop/Golang/Tutorials/test.txt"
func readFile() {
// open file
var file, err = os.OpenFile(path, os.O_RDONLY, 0644)
if err != nil {
panic(err)
}
defer file.Close()
// read file
var text = make([]byte, 1024)
for {
n, err := file.Read(text)
if err != io.EOF {
if err != nil {
panic(err)
}
}
if n == 0 {
break
}
}
if err != nil {
panic(err)
}
fmt.Println("==> file read successfully")
fmt.Println(string(text))
}
func main() {
readFile()
}
输出
PS C:\Users\Desktop\Golang> go run readfile.go ==> file read successfully hello golang
上面的代码 os.OpenFile() 用于打开文件。该函数有几个参数。
第一个参数是要打开的文件的路径。
第二个参数是访问级别。os.O_RDONLY 表示只读。
第三个参数是文件权限。
text 变量以 slice []byte 类型准备,并分配了 1024 个元素。该变量负责容纳 file.Read() 语句产生的数据。读取文件的过程将持续进行,从第一行顺序读取到最后。
执行 file.Read() 时出现的错误将被过滤,当错误不是 io.EOF 时,文件读取过程将继续。io.EOF 错误本身表示正在读取的文件是内容的最后一行或文件末尾。
删除文件的方法非常简单,只需调用 os.Remove() 函数,并输入您要删除的文件的路径作为参数即可。
package main
import (
"fmt"
"os"
)
var path = "C:/Users/Desktop/Golang/Tutorials/test.txt"
func deleteFile() {
var err = os.Remove(path)
if err != nil {
panic(err)
}
fmt.Println("==> file deleted successfully")
}
func main() {
deleteFile()
}
输出
Windows PowerShell Copyright (C) 2014 Microsoft Corporation. All rights reserved. PS C:\Users\Desktop\Golang> go run delfile.go ==> file deleted successfully