文件操作2
创建文件并写入内容
写文件操作应用实例:
基本介绍:
func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
说明:os.OpenFile 是一个更一般性的文件打开函数,它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。如果操作成功,返回的文件对象可用于I/O。如果出错,错误底层类型是*PathError。
基本应用实例-方式一
1)创建一个新文件,写入内容5句"hello, Gardon"
package main
import (
"fmt"
"bufio"
"os"
)
func main() {
//1.打开文件 d:/abc.txt
filePath := "d:/abc.txt"
file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_CREATE, 0666)
if err != nil {
fmt.Printf("open file err=%v\n", err)
return
}
//及时关闭file句柄,防止内存泄露
defer file.Close()
//准备写入5句"hello, Gardon"
str := "hello, Gardon\r\n" // \n表示换行
//写入时,使用带缓存的 *Writer
writer := bufio.NewWriter(file)
for i := 0; i < 5; i++ {
writer.WriteString(str)
}
//因为writerhi带缓存,因此在调用WriterString方法时
//内容是先写入到缓存的。所以需要调用Flush方法,将缓存的数据
//真正写入到文件中,否则文件中会没有数据。
writer.Flush()
}
写入文件的四种方式
2)打开一个存在的文件中,将原来的内容覆盖成新的内容10句 "你好,尚硅谷!"
package main
import (
"fmt"
"bufio"
"os"
)
func main() {
//1.打开一个已经存在的文件 d:/abc.txt
filePath := "d:/abc.txt"
file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_TRUNC, 0666)
if err != nil {
fmt.Printf("open file err=%v\n", err)
return
}
//及时关闭file句柄,防止内存泄露
defer file.Close()
str := "你好,尚硅谷!\r\n" // \n表示换行, \r也表示换行。有些编辑器认\r 有些认\n
//写入时,使用带缓存的 *Writer
writer := bufio.NewWriter(file)
for i := 0; i < 10; i++ {
writer.WriteString(str)
}
//因为writerhi带缓存,因此在调用WriterString方法时
//内容是先写入到缓存的。所以需要调用Flush方法,将缓存的数据
//真正写入到文件中,否则文件中会没有数据。
writer.Flush()
}
3)打开一个存在的文件,在原来的内容追加内容 'ABC! ENGLISH!'
package main
import (
"fmt"
"bufio"
"os"
)
func main() {
//1.打开一个已经存在的文件 d:/abc.txt
filePath := "d:/abc.txt"
file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_APPEND, 0666)
if err != nil {
fmt.Printf("open file err=%v\n", err)
return
}
//及时关闭file句柄,防止内存泄露
defer file.Close()
str := "ABC! ENGLISH!\r\n" // \n表示换行
//写入时,使用带缓存的 *Writer
writer := bufio.NewWriter(file)
for i := 0; i < 10; i++ {
writer.WriteString(str)
}
writer.Flush()
}
4)打开一个存在的文件,将原来的内容读出显示在终端,并且追加5句"hello,北京!"
package main
import (
"fmt"
"bufio"
"os"
"io"
)
func main() {
//1.打开一个已经存在的文件 d:/abc.txt
filePath := "d:/abc.txt"
file, err := os.OpenFile(filePath, os.O_RDWR | os.O_APPEND, 0666)
if err != nil {
fmt.Printf("open file err=%v\n", err)
return
}
//及时关闭file句柄,防止内存泄露
defer file.Close()
//先读取原来文件的内容,并显示在终端
reader := bufio.NewReader(file)
for {
str, err := reader.ReadString('\n')
if err == io.EOF {
break
}
//显示到终端
fmt.Print(str)
}
str := "hello,北京!\r\n" // \n表示换行
//写入时,使用带缓存的 *Writer
writer := bufio.NewWriter(file)
for i := 0; i < 5; i++ {
writer.WriteString(str)
}
//因为writerhi带缓存,因此在调用WriterString方法时
//内容是先写入到缓存的。所以需要调用Flush方法,将缓存的数据
//真正写入到文件中,否则文件中会没有数据。
writer.Flush()
}
使用os.OpenFile(), bufio.NewWriter(), *Writer的方法WriteString完成上面的任务。