文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

让我们一起聊聊文件的操作

2024-11-30 10:37

关注

【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("写出失败")
	}
}
来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯