在 Golang 中,写 文件 有四种方法,分别为:使用 io.WriteString 写文件,使用 ioutil.WriteFile 写文件,使用 file.Write 写文件,使用 writer.WriteString 写文件。
func (f *File) Write(b []byte) (n int, err error)
参数 | 描述 |
---|---|
f | 文件对象。 |
b | 要写入的文件内容。 |
返回值 | 描述 |
---|---|
n | 成功写入的字节数。 |
err | 写入失败,则返回错误信息。 |
使用 file.Write 方法写文件,接受的 参数 是一个要写入的文件内容的 字节 数组。如果写入成功,返回成功写入的字节数,如果写入失败,返回 error 信息。
使用此方法在写入文件之前,我们需要判断文件是否存在,如果文件不存在,则需要创建文件。
func (f *File) WriteString(s string) (n int, err error)
参数 | 描述 |
---|---|
f | 文件对象。 |
s | 要写入的文件内容。 |
返回值 | 描述 |
---|---|
n | 成功写入的字节数。 |
err | 写入失败,则返回错误信息。 |
使用 file.WriteString 方法写文件,接受的参数是一个要写入的文件内容的 字符串。如果写入成功,返回成功写入的字节数,如果写入失败,返回 error 信息。
使用此方法在写入文件之前,我们需要判断文件是否存在,如果文件不存在,则需要创建文件。
使用 file.Write 写文件
package main
import (
"fmt"
"io/ioutil"
"os"
)
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
var(
fileName = "C:/haicoder.txt"
content = "Hello HaiCoder"
file *os.File
err error
)
//使用追加模式打开文件
file, err = os.OpenFile(fileName, os.O_APPEND, 0666)
if err != nil{
fmt.Println("Open file err =", err)
return
}
defer file.Close()
//写入文件
n, err := file.Write([]byte(content))
if err != nil{
fmt.Println("Write file err =", err)
return
}
fmt.Println("Write file success, n =", n)
//读取文件
fileContent, err := ioutil.ReadFile(fileName)
if err != nil{
fmt.Println("Read file err =", err)
return
}
fmt.Println("Read file success =", string(fileContent))
}
程序运行后,控制台输出如下:
在运行程序之前,文件 “C:/haicoder.txt” 是存在的,因此,我们直接使用 os.OpenFile 打开文件,并且使用的是追加的模式。
打开文件知乎,我们直接调用 file.Write 来写入文件,写入文件成功后,使用 ioutil.ReadFile 一次性读出了整个文件内容,我们发现读出来的文件内容与写入的文件内容一样。
现在,我们再次运行程序,控制台输出如下:
我们看到,此时文件的内容已经有了两个 “Hello HaiCoder”,说明原来文件的内容没有被清空,而是被追加写入了。现在,我们删除 “C:/haicoder.txt” 文件 ,再次运行程序,控制台输出如下:
此时程序报错,因此,我们在写入文件之前需要判断文件是否存在,我们将程序修改如下:
package main
import (
"fmt"
"io/ioutil"
"os"
)
// 判断所给路径文件/文件夹是否存在
func Exists(path string) bool {
_, err := os.Stat(path) //os.Stat获取文件信息
if err != nil {
if os.IsExist(err) {
return true
}
return false
}
return true
}
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
var(
fileName = "C:/haicoder.txt"
content = "Hello HaiCoder"
file *os.File
err error
)
if Exists(fileName){
//使用追加模式打开文件
file, err = os.OpenFile(fileName, os.O_APPEND, 0666)
if err != nil{
fmt.Println("Open file err =", err)
return
}
}else{
file, err = os.Create(fileName) //创建文件
if err != nil {
fmt.Println("file create fail")
return
}
}
defer file.Close()
//写入文件
n, err := file.Write([]byte(content))
if err != nil{
fmt.Println("Write file err =", err)
return
}
fmt.Println("Write file success, n =", n)
//读取文件
fileContent, err := ioutil.ReadFile(fileName)
if err != nil{
fmt.Println("Read file err =", err)
return
}
fmt.Println("Read file success =", string(fileContent))
}
程序运行后,控制台输出如下:
我们自定义了一个 Exists 函数,Exists 函数的功能是使用 os.Stat 判断文件是否存在,如果存在,则返回 true,否则返回 false。
接着,在写入文件之前,我们首先使用 Exists 函数判断文件是否存在,如果文件存在,如直接打开,如果文件不存在,则我们使用 Create 创建文件,之后再写入文件。
使用 file.WriteString 写文件
package main
import (
"fmt"
"io/ioutil"
"os"
)
// 判断所给路径文件/文件夹是否存在
func Exists(path string) bool {
_, err := os.Stat(path) //os.Stat获取文件信息
if err != nil {
if os.IsExist(err) {
return true
}
return false
}
return true
}
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
var(
fileName = "C:/haicoder.txt"
content = "Hello HaiCoder"
file *os.File
err error
)
if Exists(fileName){
//使用追加模式打开文件
file, err = os.OpenFile(fileName, os.O_APPEND, 0666)
if err != nil{
fmt.Println("Open file err =", err)
return
}
}else{
file, err = os.Create(fileName) //创建文件
if err != nil {
fmt.Println("file create fail")
return
}
}
defer file.Close()
//写入文件
n, err := file.WriteString(content)
if err != nil{
fmt.Println("Write file err =", err)
return
}
fmt.Println("Write file success, n =", n)
//读取文件
fileContent, err := ioutil.ReadFile(fileName)
if err != nil{
fmt.Println("Read file err =", err)
return
}
fmt.Println("Read file success =", string(fileContent))
}
程序运行后,控制台输出如下:
使用 file.WriteString 写文件方法与使用 file.Write 写文件类似,只不过 file.WriteString 可以直接写一个字符串。
func (f *File) Write(b []byte) (n int, err error)
使用 file.Write 方法写文件,接受的参数是一个要写入的文件内容的字节数组。如果写入成功,返回成功写入的字节数,如果写入失败,返回 error 信息。
使用此方法在写入文件之前,我们需要判断文件是否存在,如果文件不存在,则需要创建文件。Go 语言 file.WriteString 写文件语法:
func (f *File) WriteString(s string) (n int, err error)
使用 file.WriteString 方法写文件,接受的参数是一个要写入的文件内容的字符串。