Go文件操作(下)写

news/2025/2/9 4:37:28 标签: Go, 文件操作, 写文件, os.OpenFile

Go_0">Go文件操作(下)写

前言

上次内容,我们讲解了,Go文件操作的读文件内容的三种方法
今天我们学习在如何将内容写入文件

完整示例代码

package main

import (
	"bufio"
	"fmt"
	"io/ioutil"
	"os"
)

// 写文件的三种方法

//方法一.

func wf1() {
	fp := "./1文件写入.txt" // 文件路径
	// 当我们想要写入一个文件的时候,会有三种情况:
	/*
		1. 如果文件不存在,先创建再写入
		2. 如果文件存在, 追加写入
		3. 如果文件存在,清空重写
	*/
	f, err := os.OpenFile(fp, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
	//os.O_CREATE|os.O_APPEND 表示如果文件不存在,就创建文件,如果文件存在,则追加写入
	if err != nil {
		fmt.Printf("文件打开失败,err:%v", err)
		return
	}
	defer f.Close() //延迟关闭文件
	content := "我写了点什么"
	f.Write([]byte(content))

}

func wf1_2() {
	fp := "./1_2文件写入.txt" // 文件路径
	// 当我们想要写入一个文件的时候,会有三种情况:
	/*
		1. 如果文件不存在,先创建再写入
		2. 如果文件存在, 追加写入
		3. 如果文件存在,清空重写
	*/
	f, err := os.OpenFile(fp, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
	//os.O_CREATE|os.O_APPEND 表示如果文件不存在,就创建文件,如果文件存在,则追加写入
	if err != nil {
		fmt.Printf("文件打开失败,err:%v", err)
		return
	}
	defer f.Close() //延迟关闭文件
	content := "我改写了点什么?"
	f.Write([]byte(content))

}

func wf1_3() {
	fp := "./1_3文件写入.txt" // 文件路径
	// 当我们想要写入一个文件的时候,会有三种情况:
	/*
		1. 如果文件不存在,先创建再写入
		2. 如果文件存在, 追加写入
		3. 如果文件存在,清空重写
	*/
	//直接创建新文件. 如果文件已经存在,会直接重建,效果相当于os.O_CREATE|os.O_TRUNC
	f, err := os.Create(fp)
	//os.O_CREATE|os.O_APPEND 表示如果文件不存在,就创建文件,如果文件存在,则追加写入
	if err != nil {
		fmt.Printf("文件打开失败,err:%v", err)
		return
	}
	defer f.Close() //延迟关闭文件
	content := "我直接新建的文件"
	f.Write([]byte(content))

}

// 方法二:
func wf2() {
	fp := "./bufio文件写入.text"
	f, err := os.OpenFile(fp, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
	if err != nil {
		fmt.Printf("文件打开出错, err:%v", err)
		return
	}
	defer f.Close()
	bw := bufio.NewWriter(f)
	bw.Write([]byte("第一种内容方式\n"))
	bw.WriteString("第二种内容方式")
	bw.Flush() // 一定要注意加上这一句,用来将缓存中的内容写入文件
}

// 方法三:
func wf3() {
	//如果文件已经存在,会清空内容重写文件
	content := "ioutil方法写入文件"
	err := ioutil.WriteFile("./ioutil文件.txt", []byte(content), 0666)  // 直接调用ioutil的WriteFile()方法写入内容.
	if err != nil {
		fmt.Printf("文件打开出错, err:%v", err)
		return
	}

}

func main() {
	wf1()
	wf1_2()
	wf1_3()
	wf2()
	wf3()

}

代码说明

  1. 方法一中,写了个三个函数.一般我们按第一/二个函数的方法来写即可,第三种方法的本质是第二种方法.
  2. 当我们用OpenFile()函数打开文件获得文件操作句柄的时候,要注意两点:
  • 文件的关闭操作
  • 如果是Linux系统下,第三个参数将申请系统的文件操作权限 .一般我们写0666即可.第三个参数win系统不起作用,可以随便写
  1. 方法二,在将内容写入缓存后,一定要用Flush()方法将缓存内容写入文件.否则无效.
  2. 方法三的第三个参数与方法一中的参数要求相同,方法三的写入方法同方法一中的第二个函数,即清空写入(覆盖写入).如果是追加写入,请注意

后记:

代码后面的注释基本已经比较完整.
写文件的操作也是我们的基本的操作.方法比较多,可以选择一种来习惯.其他的方法略知即可.


http://www.niftyadmin.cn/n/1653983.html

相关文章

hibernate_SessionFactory_getCurrentSession_JTA简介

JTA:java transaction api java里所规定的一种管理事务的API 在另一篇播客我写到了,SessionFactory需要关注两个方法, 即: openSession 和 getCurrentSession i. openSession 每次都是新的,需要close ii. getCurrentSessi…

随笔语录

空闲之时只做两件事:读书和运动。转载于:https://www.cnblogs.com/zhonghuasong/p/4858414.html

Turtle(7)制作简单动画

Turtle(7)制作简单动画 前言 我们已经学会了绘制简单的图, 本期开始,我们将学习如何用turtle库制作动画. 学习目标 初步了解动画制作的原理做一个简单的落雪效果 代码学习 画一片雪花 # 画三分之一的雪 def koch_1(size, n):if n 0:turtle.fd(size)else:for angle in […

jQuery EasyUI 数据网格 - 启用行内编辑(转自http://www.runoob.com/jeasyui/jeasyui-datagrid-datagrid12.html)...

可编辑的功能是最近添加到数据网格(datagrid)的。它可以使用户添加一个新行到数据网格(datagrid)。用户也可以更新一个或多个行。本教程向您展示如何创建一个数据网格(datagrid)和内联编辑器。 创建数据网格…

Turtle(8)

Turtle(8) 前言 Turtle库的内容学习到现在,基本已经完成了. 本节课,在上节课的内容基础上,做了一个简单的升级,多对象的简单动画效果 当然,turtle不是一擅长做动画的库.只是想告诉大家,这个库可以做到这个事情. 并以事实说明,这是真的可行的,且给大家做一个简单的演示 完整示…

随手笔记——ROS下如何通过Topic查看message的详细定义

随手笔记——ROS下如何通过Topic查看message的详细定义 问题描述方法 问题描述 已知Topic,想要知道该Topic的消息message的详细定义 方法 运行以下命令: rostopic info /your_topic rosmsg show 消息类型例如: rostopic info /cam/image…

hdu5289 RMQ+二分

RMQ预处理最大值&#xff0c;最小值&#xff0c;然后对于每一点&#xff0c;二分可能满足的区间长度&#xff0c;长度-1就是该店开始的区间满足的个数。 #include<stdio.h> #include<string.h> #include<math.h> #define maxn 100010 #define LL __int64 int…

Python_208(一)

Python_208(一) 前言 Python的基本学习已经有一段时间了.如何更好的使用手上的工具,让我们的学习,能有所用.我觉得是一个非常重要的学习路线. 今天我们尝试写一个Python版的控件台游戏:2048 程序分析: 游戏规则介绍 一共有4*4 16个格子开局格子上有两个数字2,每一次有效移…