go语言文件操作汇总
时间:2022-07-24
本文章向大家介绍go语言文件操作汇总,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
文件读取
读写参数
文件打开模式
const (
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 // 如果可能,打开时清空文件
)
权限控制
r ——> 004
w ——> 002
x ——> 001
读取例子
os.Open || os.OpenFile
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
// file, err := os.Open("./test.txt")
file, err := os.OpenFile("./test.txt", os.O_CREATE|os.O_RDONLY, 0666)
if err != nil {
fmt.Println("Open file error: ", err)
return
}
defer file.Close() //关闭文件
reader := bufio.NewReader(file) //带缓冲区的读写
for {
str, err := reader.ReadString('n') // 以n为分隔符来读取
if err != nil {
fmt.Println("read string failed, err: ", err)
return
}
fmt.Println("read string is %s: ", str)
}
}
readline读取
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
file, err := os.Open("./test.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
reader := bufio.NewReader(file)
for {
//ReadLine是一个低水平的行数据读取原语。大多数调用者应使用ReadBytes('n')或ReadString('n')代替,或者使用Scanner。
ReadLine尝试返回一行数据,不包括行尾标志的字节。如果行太长超过了缓冲,返回值isPrefix会被设为true,并返回行的前面一部分。该行剩下的部分将在之后的调用中返回。返回值isPrefix会在返回该行最后一个片段时才设为false。返回切片是缓冲的子切片,只在下一次读取操作之前有效。ReadLine要么返回一个非nil的line,要么返回一个非nil的err,两个返回值至少一个非nil。
返回的文本不包含行尾的标志字节("rn"或"n")。如果输入流结束时没有行尾标志字节,方法不会出错,也不会指出这一情况。在调用ReadLine之后调用UnreadByte会总是吐出最后一个读取的字节(很可能是该行的行尾标志字节),即使该字节不是ReadLine返回值的一部分。
data, prefix, err := reader.ReadLine()
if err == io.EOF {
break
}
if !prefix {
fmt.Printf("%sn", string(data))
}
}
}
读取整个文件例子 "io/ioutil" 包实现了读取整个文件功能
package main
import (
"fmt"
"io/ioutil"
)
func main() {
file := "./test.txt"
content, err := ioutil.ReadFile(file)
if err != nil {
fmt.Println("read err:", err)
}
fmt.Println(string(content))
}
文件写入
file.WriteString || file.Write
package main
import (
"fmt"
"os"
)
func main() {
fileName := "/tmp/test_write"
file, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY, 0755)
if err != nil {
fmt.Println("error", err)
os.Exit(1)
}
defer file.Close()
fileString := "Today is very happy."
file.Seek(0, 2) // 最后追加
file.WriteString(fileString)
//file.Write([]byte(fileString))
}
bufio.Writer.WriteString 带缓冲的写,最后要将缓冲中的数据写入下层的io.Writer接口(Flush方法)
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
fileName := "test.txt"
file, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY, 0755)
if err != nil {
fmt.Println("error", err)
os.Exit(1)
}
defer file.Close()
fileWrite := bufio.NewWriter(file)
fileString := "good.n"
for i := 0; i < 10; i++ {
fileWrite.WriteString(fileString)
}
//writer是带缓存,因此在调用WrteString方法时,其实内容是先写入缓存的,所以需要调用Flush方法,将缓存中的数据真正的写入到文件中,否则文件中没有数据
fileWrite.Flush()
}
拷贝文件例子
package main
import (
"fmt"
"io"
"os"
)
func CopyFile(dstName, srcName string) (writeen int64, err error) {
src, err := os.Open(dstName)
if err != nil {
fmt.Println(err)
return
}
defer src.Close()
dst, err := os.OpenFile(srcName, os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
fmt.Println(err)
return
}
defer dst.Close()
return io.Copy(dst, src)
}
func main() {
CopyFile("./test.txt", "/test_copy.txt")
fmt.Println("copy done.")
}
判断文件是否存在例子
func PathExists(path string) (bool, error) {
/*
判断文件或文件夹是否存在
如果返回的错误为nil,说明文件或文件夹存在
如果返回的错误类型使用os.IsNotExist()判断为true,说明文件或文件夹不存在
如果返回的错误为其它类型,则不确定是否在存在
*/
_, err := os.Stat(path)
if err == nil {
return true, nil
}
if os.IsNotExist(err) {
return false, nil
}
return false, err
}
- Google Chrome 浏览器 开发者工具 使用教程
- 反向代理(Reverse Proxy)及 IIS 7 应用请求路由模块
- 2014腾讯“大数据连接的未来”高峰论坛在京召开
- 工作流、业务流程管理和SOA
- 面向对象设计的SOLID原则
- 用psake来简化自动化脚本的构建
- TESLA V100如何让质疑GPU的流言“失声”
- Web 前端性能优化相关内容解析
- Service Broker 无法工作的问题修复
- .NET代码快速转换成powershell代码
- 网站性能评分工具Yslow 使用教程
- Temp权限引起的WCF问题
- WordPress 中强制设置 特色图像 才能发表文章
- 实用工具SDelete
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法