yyz notes yyz notes
首页
  • RBAC权限设计
  • 架构图标设计
  • 账号体系
  • python基础
  • python高级
  • python模块
  • python设计模式
  • python数据结构与算法
  • django
  • django-DRF
  • flask
  • 直接设计开源pip包
  • 直接设计开源项目
  • python示例题/脚本
  • python面试题
  • golang基础
  • golang高级
  • golang常用组件
  • gin框架
  • es6
  • javascript
  • react
  • vue
  • TypeScript
  • mysql
  • redis
  • minio
  • elasticsearch
  • mongodb
  • 消息队列
  • 自动化测试
  • 操作系统

    • linux
    • windows
  • nginx
  • docker
  • k8s
  • git
  • ldap
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

益章

可乐鸡翅
首页
  • RBAC权限设计
  • 架构图标设计
  • 账号体系
  • python基础
  • python高级
  • python模块
  • python设计模式
  • python数据结构与算法
  • django
  • django-DRF
  • flask
  • 直接设计开源pip包
  • 直接设计开源项目
  • python示例题/脚本
  • python面试题
  • golang基础
  • golang高级
  • golang常用组件
  • gin框架
  • es6
  • javascript
  • react
  • vue
  • TypeScript
  • mysql
  • redis
  • minio
  • elasticsearch
  • mongodb
  • 消息队列
  • 自动化测试
  • 操作系统

    • linux
    • windows
  • nginx
  • docker
  • k8s
  • git
  • ldap
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • golang基础

    • 初识golang

    • golang基础语法

    • golang流程控制

    • golang函数

    • golang内置函数

    • golang包

    • golang错误异常处理

    • golang面向对象(结构体)

    • golang文件处理

      • 文件的引入
        • 介绍
          • 文件是什么?
          • os包下的File结构体封装了对文件的操作:
          • File结构体---打开文件和关闭文件:
          • 案例:
        • 读取文件
          • 一次性
          • 带缓冲区
        • 写入文件
          • 打开文件操作:
          • 案例
        • 文件的复制
      • 自定义数据文件
      • JSON文件的读写操作
      • XML文件的读写操作
      • 更多类型文件处理
    • golang并发编程简介

    • golang并发编程-协程

    • golang网络编程

    • 反射 reflect

  • golang高级

  • 常用组件

  • gin

  • golang
  • golang基础
  • golang文件处理
YiZhang-You
2023-05-24
目录

文件的引入

# 1. 文件的引入

# 介绍

# 文件是什么?

文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保持视频,声音...

# os包下的File结构体封装了对文件的操作:

# File结构体---打开文件和关闭文件:

(1)打开文件,用于读取:(函数)

传入一个字符串(文件的路径),返回的是文件的指针,和是否打开成功

(2)关闭文件:(方法)

使文件不能用于读写。它返回可能出现的错误

# 案例:

package main
import(
        "fmt"
        "os"
)
func main(){
        //打开文件:
        file,err := os.Open("d:/Test.txt");
        if err != nil {//出错
                fmt.Println("文件打开出错,对应错误为:",err)
        }
        //没有出错,输出文件:
        fmt.Printf("文件=%v",file)
        //.........一系列操作
        //关闭文件:
        err2 := file.Close();
        if err2 != nil {
                fmt.Println("关闭失败")
        }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 读取文件

# 一次性

读取文件的内容并显示在终端(使用ioutil一次将整个文件读入到内存中),这种方式适用于文件不大的情况。相关方法和函数(ioutil.ReadFile)

package main
import(
        "fmt"
        "io/ioutil"
)
func main(){
        //备注:在下面的程序中不需要进行 Open\Close操作,因为文件的打开和关闭操作被封装在ReadFile函数内部了
        //读取文件:
        content,err := ioutil.ReadFile("d:/Test.txt")//返回内容为:[]byte,err
        if err != nil {//读取有误
                fmt.Println("读取出错,错误为:",err)
        }
        //如果读取成功,将内容显示在终端即可:
        //fmt.Printf("%v",content)
        fmt.Printf("%v",string(content))
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 带缓冲区

读取文件的内容并显示在终端(带缓冲区的方式-4096字节),适合读取比较大的文件,使用os.Open,file.Close,bufio.NewReader(),reader.ReadString函数和方法

package main
import(
        "fmt"
        "os"
        "bufio"
        "io"
)
func main(){
        //打开文件:
        file,err := os.Open("d:/Test.txt")
        if err != nil {//打开失败
                fmt.Println("文件打开失败,err=",err)
        }
        //当函数退出时,让file关闭,防止内存泄露:
        defer file.Close()
        //创建一个流:
        reader := bufio.NewReader(file)
        //读取操作:
        for {
                str,err := reader.ReadString('\n')//读取到一个换行就结束
                if err == io.EOF {//io.EOF 表示已经读取到文件的结尾
                        break
                }
                //如果没有读取到文件结尾的话,就正常输出文件内容即可:
                fmt.Println(str)
        }
        //结束:
        fmt.Println("文件读取成功,并且全部读取完毕")
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# 写入文件

# 打开文件操作:

三个参数含义: (1)要打开的文件的路径

(2)文件打开模式(可以利用"|"符号进行组合)

(3)权限控制(linux/unix系统下才生效,windows下设置无效)- 0666

# 案例

package main
import(
        "fmt"
        "os"
        "bufio"
)
func main(){
        //写入文件操作:
        //打开文件:
        file , err := os.OpenFile("d:/Demo.txt",os.O_RDWR | os.O_APPEND | os.O_CREATE,0666)
        if err != nil {//文件打开失败
                fmt.Printf("打开文件失败",err)
                return
        }
        //及时将文件关闭:
        defer file.Close()
        //写入文件操作:---》IO流---》缓冲输出流(带缓冲区)
        writer := bufio.NewWriter(file)
        for i := 0; i < 10;i++ {
                writer.WriteString("你好 马士兵\n")
        } 
        //流带缓冲区,刷新数据--->真正写入文件中:
        writer.Flush()
        s :=os.FileMode(0666).String()
        fmt.Println(s)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# 文件的复制

package main
import(
        "fmt"
        "io/ioutil"
)
func main(){
        //定义源文件:
        file1Path := "d:/Demo.txt"
        //定义目标文件:
        file2Path := "d:/Demo2.txt"
        //对文件进行读取:
        content,err := ioutil.ReadFile(file1Path)
        if err != nil {
                fmt.Println("读取有问题!")
                return
        }
        //写出文件:
        err = ioutil.WriteFile(file2Path,content,0666)
        if err != nil {
                fmt.Println("写出失败!")
        }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
编辑 (opens new window)
断言
自定义数据文件

← 断言 自定义数据文件→

最近更新
01
配置yun源
05-24
02
linux-配置python虚拟环境
05-24
03
linux文件目录管理
05-24
更多文章>
Theme by Vdoing | Copyright © 2023-2023 yizhang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式