网站首页 > 基础教程 正文
文件
【1】文件是什么?
文件是保存数据的地方,是数据源的一种,比如大家经常使用的word文档、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保持视频,声音...
【2】os包下的File结构体封装了对文件的操作:
【3】File结构体---打开文件和关闭文件:
(1)打开文件,用于读取:(函数)
传入一个字符串(文件的路径),返回的是文件的指针,和是否打开成功
(2)关闭文件:(方法)
使文件不能用于读写。它返回可能出现的错误
【4】案例:
package main
import(
"fmt"
"os"
)
func main() {
//打开文件:
file,err := os.Open("D:/test.txt")
if err != nil {
fmt.Println("文件打开出错,对应错误为:",err)
}
//没有出错,输出文件:
fmt.Println("文件=v%",file)
//.........一系列操作
//关闭文件:
err2 := file.Close()
if err2 != nil {
fmt.Println("关闭失败!")
}
}
io的引入
【1】IO流对文件进行操作:
读取文件(一次性)
【1】读取文件的内容并显示在终端(使用ioutil一次将整个文件读入到内存中),这种方式适用于文件不大的情况。相关方法和函数(ioutil.ReadFile)
【2】案例:
package main
import(
"fmt"
"io/ioutil"
)
func main() {
//备注:在下面的程序中不需要进行 Open\Close操作,因为文件的打开和关闭操作被封装在ReadFile函数内部了
//读取文件:
content,err := ioutil.ReadFile("D:/test.txt")
if err != nil {
fmt.Println("读取错误,错误为:",err)
}
//如果读取成功,将内容显示在终端即可:
//fmt.Printf("%v",content)
fmt.Printf("%v",string(content))
}
读取文件(带缓冲区)
【1】读取文件的内容并显示在终端(带缓冲区的方式-4096字节),适合读取比较大的文件,使用os.Open,file.Close,bufio.NewReader(),reader.ReadString函数和方法
【2】案例:
package main
import(
"fmt"
"io"
"os"
"bufio"
)
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')
//io.EOF 表示已经读取到文件的结尾
if err == io.EOF {
break
}
//如果没有读取到文件结尾的话,就正常输出文件内容即可:
fmt.Println(str)
}
//结束:
fmt.Println("文件读取成功,并且全部读取完毕")
}
写入文件
【1】打开文件操作:
三个参数含义:
(1)要打开的文件的路径
(2)文件打开模式(可以利用"|"符号进行组合)
(3)权限控制(linux/unix系统下才生效,windows下设置无效)- 0666
【2】案例:
package main
import(
"fmt"
"os"
"bufio"
)
func main() {
//写入文件操作:
//打开文件:
file,err := os.OpenFile("D:/test.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)
}
文件复制操作
案例
package main
import(
"io/ioutil"
"fmt"
)
func main() {
//定义源文件:
filePath := "D:/test.txt"
//定义目标文件:
newPath := "D:/test_copy.txt"
//对文件进行读取:
content,err := ioutil.ReadFile(filePath)
if err != nil {
fmt.Printf("打开文件失败",err)
return
}
//写出文件:
err = ioutil.WriteFile(newPath,content,0666)
if err != nil {
fmt.Println("写出失败")
}
}
源码地址:「链接」
参考博客:cyz
猜你喜欢
- 2024-11-26 golang defer、panic、recover实践
- 2024-11-26 go-fastdfs文件上传
- 2024-11-26 OpenHarmony3.0在树莓派3B上的烧录与通讯
- 2024-11-26 go|bytes.buffer
- 2024-11-26 AOVX资产跟踪产品测试工具mPower1203如何使用python对接 (二)
- 2024-11-26 Python os.dup2() 方法是什么?os.du
- 2024-11-26 go中关于文件和json操作的知识点小结
- 2024-11-26 python3从零学习-5.8.4、mmap—内存映射文件支持
- 2024-11-26 29.Python 读取文件的六种方式
- 2024-11-26 macOS安装并设置五笔输入法
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)