十、文件流

10.1、读取文件

10.1.1、打开文件/关闭文件

os.Open()函数能够打开一文件,返回一个 ***File** 和一个**err**,对得到的文件实例调用close()方法能够关闭文件。

10.1.1、file.Read()

func (f *File) Read(b []byte) (n int, err error)
const A = 256
func main() {open, err := os.Open("./09接口.go")if err != nil {fmt.Println("未找到文件:", err)}defer open.Close()var bytes [**A**]bytefor {n, err := open.Read(bytes[:])if err == io.EOF {fmt.Println("读取完毕:", err)return}if err != nil {fmt.Println("读取失败:", err)return}fmt.Println("读取了", n, "个字节")fmt.Println(string(bytes[:]))if n < **A** {return}}
}

10.1.2、bufio

func main() {open, err := os.Open("./09接口.go")if err != nil {fmt.Println("未找到文件:", err)}defer open.Close()reader := bufio.NewReader(open)for {readString, err := reader.ReadString('\n') //字符if err == io.EOF {fmt.Println("读取完毕:", err)return}if err != nil {fmt.Println("读取失败:", err)return}fmt.Print(readString)}
}

10.1.3、ioutil读取整个文件

func main() {file, err := ioutil.ReadFile("./09接口.go")if err != nil {fmt.Println("读取失败:", err)return}fmt.Println(string(file))
}

10.2、文件写入

10.2.1、os.OpenFile()

os.OpenFile()函数能够以指定模式打开文件,从而实现文件写入相关功能。func OpenFile(name string, flag int, perm FileMode) (*File, error) {}

● name:要打开的文件名

● flag :打开文件的模式。模式有以下几种:

● perm:文件权限,一个八进制数。r (读) 04,w (写) 02,x (执行) 01。

10.2.2、write()与writeString()

file, err := os.OpenFile("file.txt", os.**O_CREATE**|os.**O_APPEND**|os.**O_WRONLY**,0666)
if err != nil {fmt.Println("打开错误:",err)return
}
defer file.Close()
str := "hello 世界"
file.Write([]byte(str))
file.WriteString("hello 你好")

10.2.3、bufio.NewWriter

func main() {file, err := os.OpenFile("file.txt", os.**O_CREATE**|os.**O_TRUNC**|os.**O_WRONLY**,0666)if err != nil {fmt.Println("打开错误:",err)return}defer file.Close()writer := bufio.NewWriter(file)str := "hello 世界"writer.WriteString(str)writer.Flush()
}

10.2.4、ioutil.WriteFile

func main() {str := "hello 世界a"err := ioutil.WriteFile("file.txt",[]byte(str),0666)if err != nil {fmt.Println("打开错误:",err)return}
}

10.3、使用bufio获取用户输入

bufio.NewReader的参数就是接口与类型

func main() {var s stringreader := bufio.NewReader(os.Stdin)s, _ = reader.ReadString('\n')fmt.Println("输入的是:",s)
}

10.4、在文件中插入内容

func (f *File) Seek(offset int64, whence int) (ret int64, err error)

Seek设置下一次读/写的位置。

offset为相对偏移量。

whence决定相对位置: 0为相对文件开头,1为相对当前位置,2为相对文件结尾。它返回新的偏移量(相对开头)和可能的错误。

10.4.1、指定位置读取

func main() {file, err := os.OpenFile("./file.txt", os.**O_RDWR**, 0644)if err != nil {fmt.Println("文件打开失败:",err)return}defer file.Close()file.Seek(1,0)//光标移动var ret [1]byte//n, err := file.Read(ret[:])//读一个字节if err != nil {fmt.Println("文件读取失败:",err)return}fmt.Println(string(ret[:n]))
}


10.4.2、指定位置写入(替换)

func main() {file, err := os.OpenFile("./file.txt", os.**O_RDWR**, 0644)if err != nil {fmt.Println("文件打开失败:", err)return}defer file.Close()file.Seek(1, 0) //光标移动ret := []byte{'5'}_, err = file.Write(ret[:])//写入if err != nil {fmt.Println("写入文件失败:", err)return}
}

写入前:

写入后:

注意:写入指定位置,会替换此位置原来的内容,没有办法在文件按中间插入内容。

10.4.3、指定位置追加

追加思路:

借助临时文件:新建一个文件,把追加之前的写进去,在写追加的内容,然后把追加之后的写进去。(个人建议直接把所有内容写好重新覆盖,比较简单)

10.5、练习

10.5.1、复制文件

func copyFile(dstName, srcName string) (written int64, err error) {srcFile, err := os.Open(srcName)if err != nil {fmt.Println("文件打开失败:", err)return 1, err}defer srcFile.Close()dstfile, err := os.OpenFile(dstName, os.**O_CREATE**|os.**O_TRUNC**|os.**O_WRONLY**, 0644)if err != nil {return 2, err}defer dstfile.Close()return io.Copy(dstfile, srcFile)
}
func main() {mode, err := copyFile("dis.txt", "file.txt")if err != nil {fmt.Println("文件复制失败:", err)}if mode == 1 {fmt.Println("失败原因:资源文件打开失败")} else if mode == 2 {fmt.Println("失败原因:复制的新文件创建失败")}
}

Go语言基础(10)-- 文件流相关推荐

  1. c语言中把文件看成什么流,C语言中的文件流

    所谓文件(file)一般指存储在外部介质上数据的集合,比如我们经常使用的mp3.mp4.txt.bmp.jpg.exe.rmvb等等.这些文件各有各的用途,我们通常将它们存放在磁盘或者可移动盘等介质中 ...

  2. C语言基础14——文件操作。文本文件或二进制文件读写。通讯录的改造。文件缓冲区讲解

    目录 为什么使用文件? 什么是文件? 文件的打开和关闭 文件指针 文件的打开和关闭 文件的打开方式 流 重定义文件 文件流 文件的顺序读写 以字符形式读写文本文件 fputc()函数 fgetc()函 ...

  3. Java语言基础(IO流2(字节流、字符流))

    Java语言基础 IO流 字节流 可以读写任何类型的文件,比如:音频.视频 .文本文件 字节流的抽象基类: 字节输入流:InputStream 字节输出流:OutputStream 我们发现Input ...

  4. Linux C语言 fileno(返回文件流所使用的文件描述词)

    fileno(返回文件流所使用的文件描述词) 相关函数 open,fopen 表头文件 #include<stdio.h> 定义函数 int fileno(FILE * stream); ...

  5. C语言——基础的文件处理

    ok,上期我们学完了链表,这期我们来学文件处理.其实你可能一直在接触文件处理,但是可能不知道到底什么是文件处理.比如说啊,你在HDUOJ提交了一份代码,那么OJ就会拿测试案例给你的代码运行对吧?那么, ...

  6. 一、C语言篇——10. 文件操作

    01. 文件打开和关闭 #include <stdio.h> FILE * fopen(const char * filename, const char * mode); 功能:打开文件 ...

  7. C语言基础10——指针进阶。字符指针、指针数组、数组指针、函数指针、函数指针数组、回调函数、数组名详解、杨氏矩阵、字符串旋转

    目录 字符指针 指针数组 数组指针 数组传参.指针参数 函数指针 函数指针数组 指向函数指针数组的指针 回调函数 练习 数组名的意义 指针笔试题 字符指针 字符指针的另一种使用方式 #include ...

  8. JavaScript语言基础10

    JavaScript中的if语句: <span style="font-size:18px;"><HTML> <HEAD><TITLE&g ...

  9. 【Python语言基础】——Python 文件写入

    Python语言基础--Python 文件写入 文章目录 Python语言基础--Python 文件写入 一.Python 文件写入 一.Python 文件写入 写入已有文件 如需写入已有的文件,必须 ...

  10. c语言怎么把一个整数挨挨挤挤,《C语言》课程PPT_第1章_C语言基础

    C语言基础 第一章 传褪猿度历霞司腺娠详躁代升乍圃刷烘诧藩东兹淮驹耿游竿郝芽祖续憨荫 C语言 课程PPT 第1章 C语言基础 C语言 课程PPT 第1章 C语言基础 2 本章目标 命令 程序以及软件之 ...

最新文章

  1. JRoll 2 使用文档(史上最强大的下拉刷新,滚动,无限加载插件)
  2. Tomcat -- Cannot create a server using the selected type
  3. 利用DOM进行照片的切换
  4. 使用WPA Supplicant在Ubuntu 18.04/19.04上从终端连接到Wi-Fi的方法
  5. 实例50:python
  6. Redis数据存储解决方案
  7. 2020中国零售品牌数字化转型白皮书
  8. python“-o”命令更改存储位置_程序员的狂欢地一般人的超大存储免费空间和网站空间你要会用用...
  9. 【JVM】JVM客户端 server模式 client 模式
  10. rust程序设计语言第二版_C语言程序设计(山东联盟青岛大学版)
  11. 新代系统plc梯形图说明书_PLC梯形图结构和运行原理讲解,适合初学者!
  12. 初学者关于内存的思考(不断加深不断更新中)
  13. oracle DML错误日志(笔记)
  14. 对数字信号处理中各种频率以及分辨率的理解
  15. 机器学习 Machine Learning- 吴恩达Andrew Ng 第1~5课总结
  16. 常用词句或缩略语汇总
  17. 60著名条原则和定理
  18. 联想G50-70无线网开关,无线网显示红叉
  19. 网易mumu模拟器怎么清理缓存?
  20. Idea中怎么运行从github上下载的项目

热门文章

  1. STM32的ITM跟踪调试功能介绍及实现(一)KEIL篇
  2. 【插值】牛顿插值、拉格朗日插值、三次样条插值的Python代码实现
  3. 产品思维训练 | 微信号终于能改了!
  4. 最近开发的基于Excel的考试系统---VBA
  5. 打造免开发智能太阳能灯|支持APP 语音控制低功耗抗干扰
  6. 微信公众号页面跳转手机QQ
  7. JRE安装遇到Error 1603
  8. Java开发全终端实战租房项目
  9. 电视剧奋斗资料收集(资料)
  10. 华为harmonyos电脑安装,华为MatePad Pro2入网:预装HarmonyOS系统