【GO】文件读写:打开关闭+打开模式+文件权限+文件读取

简介: 【GO】文件读写:打开关闭+打开模式+文件权限+文件读取

屏幕快照 2022-05-18 下午8.19.30.png

package main
import (
  "fmt"
  "os"
  "time"
)
func main() {
  file, e := os.Open("D:/kaka.txt")
  if e != nil {
    fmt.Println("文件打开失败")
  } else {
    fmt.Println("文件打开成功")
  }
  defer func() {
    file.Close()
    fmt.Println("文件已关闭")
  }()
  fmt.Println("愉快滴欣赏avi艺术")
  time.Sleep(3 * time.Second)
}

注意点


在os.open时,如果你的操作系统时windows这个时候不要打开文件直接复制文件路径,会报一个文件目录的错误


The filename, directory name, or volume label syntax is incorrect.


在打开文件的路径必须自己手动输入,因为编码有问题


打开文件也必须关闭文件,所以在任何时候打开一个文件操作后使用延迟执行的defer来进行关闭文件


defer是延迟执行的关键词,在所有程序都执行完才会执行的代码


文件打开模式


  • 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_TRUNC int = syscall.O_TRUNC // 覆盖模式


文件权限


权限详解有什么问题可以看这篇文章,详细的说明了权限的问题。

这里简单的说一下 r w x 分别代表的是什么意思

r表示可读

w表示可写

x表示可执行


任何文件都有使用者,群组,other的概念。 权限所代表的是r = 4 w = 2 x = 1 这块的知识是在linux写过的,就不在继续讨论了。


文件读取

屏幕快照 2022-05-18 下午8.20.20.png

image.png

func main() {
  file, e := os.OpenFile("D:/kaka.txt", os.O_RDONLY, 0666)
  if e != nil {
    fmt.Println("文件打开失败:err", e)
    return
  } else {
    fmt.Println("文件打开成功")
  }
  // 打开时立刻挂起关闭程序
  defer func() {
    file.Close()
    fmt.Println("文件关闭成功")
  }()
  // 创建文件的读取器
  reader := bufio.NewReader(file)
  // 死循环读取
  for {
    // 以换行符为界,分批次读取数据,得到readString
    readString, e := reader.ReadString('\n')
    if e != nil {
      fmt.Println("文件读取失败;err", e)
      // 如果已到文件末尾,则直接结束
      if e == io.EOF {
        break
      }
    }
    fmt.Print(readString)
  }
  fmt.Println("读取结束")
}

屏幕快照 2022-05-18 下午8.20.49.png

func main() {
  bytes, err := ioutil.ReadFile("d:/kaka.txt")
  if err != nil {
    fmt.Println("读取失败,err=", err)
    return
  } else {
    contentStr := string(bytes)
    fmt.Println(contentStr)
  }
}
相关文章
|
7月前
|
Linux Go iOS开发
Go语言100个实战案例-进阶与部署篇:使用Go打包生成可执行文件
本文详解Go语言打包与跨平台编译技巧,涵盖`go build`命令、多平台构建、二进制优化及资源嵌入(embed),助你将项目编译为无依赖的独立可执行文件,轻松实现高效分发与部署。
1229 162
|
6月前
|
存储 监控 算法
防止员工泄密软件中文件访问日志管理的 Go 语言 B + 树算法
B+树凭借高效范围查询与稳定插入删除性能,为防止员工泄密软件提供高响应、可追溯的日志管理方案,显著提升海量文件操作日志的存储与检索效率。
198 2
|
11月前
|
人工智能 安全 算法
Go入门实战:并发模式的使用
本文详细探讨了Go语言的并发模式,包括Goroutine、Channel、Mutex和WaitGroup等核心概念。通过具体代码实例与详细解释,介绍了这些模式的原理及应用。同时分析了未来发展趋势与挑战,如更高效的并发控制、更好的并发安全及性能优化。Go语言凭借其优秀的并发性能,在现代编程中备受青睐。
368 33
|
9月前
|
数据采集 JSON 自然语言处理
Go语言实战案例-统计文件中每个字母出现频率
《Go语言100个实战案例》中的“文件与IO操作篇 - 案例19”教你如何统计文本文件中每个英文字母的出现频率。通过实战练习,掌握文件读取、字符处理、map统计等基础技能,适合Go语言初学者提升编程能力。
|
9月前
|
数据采集 Go
Go语言实战案例-批量重命名文件
《Go语言100个实战案例》中的“文件与IO操作篇 - 案例17:批量重命名文件”,适合初学者学习使用 Go 操作文件系统,实现文件批量重命名功能,包括添加前缀、后缀或编号等。
|
9月前
|
JSON 缓存 Go
Go语言实战案例-向文件写入内容
本案例讲解如何使用 Go 语言向文件写入内容,涵盖覆盖写入与追加写入两种模式,适用于日志记录、报告生成等场景。涉及 `os.WriteFile`、`os.OpenFile` 等核心函数,并演示如何处理文件权限与编码问题。
|
10月前
|
XML JSON Go
Go语言中的文件与IO:JSON、CSV、XML处理
本文介绍了 Go 语言中对 JSON、CSV 和 XML 三种常见数据格式的处理方法。通过标准库 `encoding/json`、`encoding/csv` 和 `encoding/xml`,可以实现结构体与数据格式之间的序列化与反序列化。JSON 适合 Web API 和前后端通信,因其清晰易读;CSV 适用于表格数据和轻量级交换;XML 则支持复杂嵌套结构,常用于配置文件和 SOAP 协议。文中提供代码示例,涵盖基本使用、嵌套结构处理及实战建议,帮助开发者高效操作这些格式。
|
10月前
|
Unix Go
Go语言中的文件与IO:文件读写
本文介绍了 Go 语言中文件操作的基础方法,涵盖打开与关闭文件、读取和写入文件内容、追加写入以及复制文件等功能。通过 `os`、`bufio` 和 `io` 等标准库包,提供了高效且灵活的实现方式,如使用 `os.ReadFile` 读取整个文件、`bufio.Scanner` 逐行读取、`os.Create` 创建文件以及 `io.Copy` 复制文件内容。同时强调了错误处理的重要性,例如使用 `defer` 确保文件关闭,并推荐注意文件权限设置(如 UNIX 系统中的 `0644`)。最后以表格形式总结了常用操作及其推荐方法,便于快速查阅和应用。
|
10月前
|
Go 数据处理
Go语言中的文件与IO:bufio 和 scanner
Go 标准库中的 `bufio` 包高效读写功能,适用于文件和数据处理。`bufio.Reader` 支持按行或分隔符读取,`bufio.Writer` 提供高性能写入并需调用 `Flush()` 确保数据写入。`bufio.Scanner` 是处理文本文件(如日志、配置)的利器,可按行、单词等分割内容。本文详解其用法,并给出实践建议,如统计字符数、模拟 `tail -f` 和词频分析等。
|
9月前
|
Go 开发工具 git
Go语言实战案例-遍历目录下所有文件
本案例讲解如何使用 Go 语言递归遍历目录及其子目录中的所有文件。通过 `filepath.WalkDir` 函数实现目录遍历,涵盖文件判断、路径获取和错误处理等知识点,适用于文件管理、批量处理和查找特定类型文件等场景。

热门文章

最新文章

下一篇
开通oss服务