Golang文件操作
一.文件操作
1.关于文件操作
- 需要使用到os包
- os.open 打开文件流 返回一个file指针
- file.close 关闭文件流
- 读取文件是对文件的一个输入流
- 写入文件是对文件的一个输出流
二.实例
1.打开一个文件流
- 要记得用defer关闭一个文件流,否则会内存泄漏
2.读取文件流内容
- 读取文件内容,需要用到bufio包
- bufio.NewReader()(带缓冲区的方式打开,适合打开较大的文件)
- reader.ReadString()(读取文件)
- io.EOF表示读到文件末尾
- io/ioutil ioutil.ReadFile()一次性读取文件,不需要open和close,缺点是只能打开较小的文件,不适合打开太大的文件
3.创建文件并且写入内容
- 创建文件并且写入内容需要用到 os.OpenFile()方法于bufio.NewWriter()方法
- os.OpenFile()方法
- 第一个参数需要传入文件路径
- 第二个参数需要传入打开的模式
-
O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件
O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件
O_RDWR int = syscall.O_RDWR // 读写模式打开文件
O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部
O_CREATE int = syscall.O_CREAT // 如果不存在将创建一个新文件
O_EXCL int = syscall.O_EXCL // 和O_CREATE配合使用,文件必须不存在
O_SYNC int = syscall.O_SYNC // 打开文件用于同步I/O
O_TRUNC int = syscall.O_TRUNC // 如果可能,打开时清空文件 - 第三个参数是传入文件权限777或者其他
- bufio.NewWriter()方法
- 第一个参数是传入一个文件流,返回一个writer指针结构体
- 用writer.WriteString写入缓冲区, 在用writer.Flush写入文件
运行结果1
运行结果2
三.代码块
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
// 关于文件操作 需要使用到os包
// os.open 打开文件流 返回一个file指针
// file.close 关闭文件流
// file, err := os.Open("../test.txt")
// if err != nil {
// fmt.Println(err)
// return
// }
// defer file.Close()
// fmt.Println(file)
// 读取文件内容,需要用到bufio包
// bufio.NewReader()(带缓冲区的方式打开)
// reader.ReadString()(读取文件)
// io.EOF表示读到文件末尾
// reader := bufio.NewReader(file)
// for {
// str, err := reader.ReadString('\n')
// if err == io.EOF {
// break
// }
// fmt.Print(str)
// }
// io/ioutil ioutil.ReadFile()一次性读取文件,不需要open和close,缺点是只能打开较小的文件,不适合打开太大的文件
// filePath := "../test.txt"
// file, err := ioutil.ReadFile(filePath)
// if err != nil {
// fmt.Println(err)
// }
// fmt.Printf("%s", file)
/*
- 创建文件并且写入内容需要用到 os.OpenFile()方法于bufio.NewWriter()方法
- os.OpenFile()方法
- 第一个参数需要传入文件路径
- 第二个参数需要传入打开的模式
- > O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件
O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件
O_RDWR int = syscall.O_RDWR // 读写模式打开文件
O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部
O_CREATE int = syscall.O_CREAT // 如果不存在将创建一个新文件
O_EXCL int = syscall.O_EXCL // 和O_CREATE配合使用,文件必须不存在
O_SYNC int = syscall.O_SYNC // 打开文件用于同步I/O
O_TRUNC int = syscall.O_TRUNC // 如果可能,打开时清空文件
- 第三个参数是传入文件权限777或者其他
- bufio.NewWriter()方法
- 第一个参数是传入一个文件流,返回一个writer指针结构体
- 用writer.WriteString写入缓冲区, 在用writer.Flush写入文件
*/
filePath := "../abc.txt"
file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_CREATE, 777)
if err != nil {
fmt.Println(err)
}
defer file.Close()
writer := bufio.NewWriter(file)
str := "holler,world\n"
for i := 0; i < 3; i++ {
writer.WriteString(str)
}
writer.Flush()
}