首页 > 其他分享 >Golang文件操作

Golang文件操作

时间:2024-06-30 21:31:41浏览次数:3  
标签:文件 err fmt Golang file 操作 main os

文件是数据源(保存数据的地方)的一种,word 文档,txt 文件,excel 文件...都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保持视频,声音...

os.file封装了所有对文件的操作,且file是一个结构体

 

打开和关闭文件

1.打开文件,用于读取:

 

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

2.关闭文件,(方法),绑定file结构体

package main
import (
	"fmt"
	"os"
)
	//file也叫file对象,file指针,file文件句柄
func main() {
	//打开文件
	file, err := os.Open("d:/Test.txt")
	if err != nil {
		fmt.Println("打开出错,对应错误为:", err)
	}
	//输出文件,看文件是什么,是一个指针*file
	fmt.Println("文件=%v", file)
	//.....一系列操作后
	//关闭文件
	err2:=file.Close()
	if err2 != nil {
		fmt.Println("关闭出错")
	}
}

 

读取文件

io流对文件的操作

 

 

1.读取文件(不带缓冲区)(适用于文件较小)

读取文件的内容并显示到终端,适用于文件较小的情况

os包下的ReadFile函数(io/ioutils包已经被弃用了)且该操作不须事先打开和事后关闭文件,已经封装到函数中了

package main

import (
	"fmt"
	"os"
)

func main() {
	//读取文件
	content, err := os.ReadFile("d:/Test.txt")//io/ioutils包已经被弃用了
	if err != nil {
		fmt.Println("读取出错,对应错误为:", err)
	}
	//fmt.Printf("%v\n", content)//由于返回值是byte切片,这样的话会输出Ascll码
	fmt.Println(string(content)) //转为字符串即可
}
 2.读取文件(带缓冲区)(适用于文件较大)

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

 

 

 

package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
)
func main() {
	file, err := os.Open("d:/Test.txt")
	if err != nil {
		fmt.Println(err)
	}
	//当函数退出时,让file关闭,防止内存泄漏
	defer file.Close()

    //创建一个流(带缓冲的):
	reader := bufio.NewReader(file)
	//读取操作
	for {//思考:这样的for形式可以从一到无穷,要配合break使用
		str, err := reader.ReadString('\n')// 读到一个换行就结束
		//如果没有读取到文件结尾的话,就正常输出文件内容即可
		fmt.Println(str)
		if err == io.EOF { //io.EOF表示已经读取到文件的结尾
			break
		}
	}
	//结束:
	fmt.Println("end")
}

写出文件

打开文件操作

三个参数含义

1.要打开文件的路径

2.文件打开模式

 

3.权限控制(Linux/unix系统下才生效,windows下无效)windows下写0666

实例1:往文件中追加文本
package main

import (
	"bufio"
	"fmt"
	"os"
)

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()

	//开始写,缓冲输出流,以程序为中心,写到文件里为输出
	writer := bufio.NewWriter(file) //io流,缓冲输出流,自带缓冲区
	for i := 0; i < 10; i++ {
		writer.WriteString("你好,马士兵") //一个方法
	}
	//由于带缓冲区,flush后才能真正写入文件中
	writer.Flush()

}

实例2:覆盖原有文本

打开 一个存在的文件中,将原来的内容覆盖成新的内容 10 句 "你好,尚硅谷!"  

package main 
import (
	"fmt" 
    "bufio"
    "os"
)


func main() {
//打开一个存在的文件中,将原来的内容覆盖成新的内容 10 句 "你好,尚硅谷!"

//1 .打开文件已经存在文件, d:/abc.txt 
    filePath := "d:/abc.txt"
    file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_TRUNC, 0666) 
    if err != nil {
    	fmt.Printf("open file err=%v\n", err) 
    	return
	}
	//及时关闭 file 句柄
	defer file.Close()
	//准备写入 5 句 "你好,尚硅谷!"
	str := "你好,尚硅谷!\r\n" // \r\n 表示换行
	//写入时,使用带缓存的 *Writer 
    writer := bufio.NewWriter(file)
	for i := 0; i < 10; i++ { 
        writer.WriteString(str)
	}
	writer.Flush()
}
 实例3:将一个文件的内容,写入到另外一个文件。

注:这两个文件已经存在了. 说明:使用 io.ReadFile / io.WriteFile 完成写文件的任务.

 

判断文件是否存在 

文件复制操作(利用读的方式)

将源文件中内容复制到目标文件

package main

import (
	"fmt"
	"os"
)

func main() {
	//定义源文件
	file1Path := "d:/Test.txt"
	//定义目标文件
	flie2Path := "d:/Test1.txt"//将源文件中内容复制到目标文件中
	//对文件进行读取
	content, err := os.ReadFile(file1Path)
	if err != nil {
		fmt.Println("读取有问题")
		return
	}
	//写出到目标文件,注意会覆盖文件
	err = os.WriteFile(flie2Path, content, 0666) //err是个变量
	if err != nil {
		fmt.Println("写出失败")
	}
}

拷贝文件(利用copy方法)

将一张图片 拷贝到另外一个文件

package main

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

// 自己编写一个函数,接收两个文件路径 srcFileName dstFileName
func CopyFile(dstFileName string, srcFileName string) (written int64, err error) {
    //打开源文件
    srcFile, err := os.Open(srcFileName)
    if err != nil {
       fmt.Printf("open file err=%v\n", err)
    }
    defer srcFile.Close()
    //通过 srcfile ,获取到Reader,因为要读该文件
    reader := bufio.NewReader(srcFile)
    //打开目标文件dstFileName
    dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY|os.O_CREATE, 0666)
    if err != nil {
       fmt.Printf("open file err=%v\n", err)
       return
    }

    //通过 dstFile, 获取到 Writer,因为要写到该文件
    writer := bufio.NewWriter(dstFile)
    defer dstFile.Close()
    return io.Copy(writer, reader)//将要读的copy给要写的

}

func main() {
    //将 d:/flower.jpg  文件拷贝到 d:/abc.jpg
    //调用 CopyFile 完成文件拷贝
    srcFile := "d:/flower.jpg"
    dstFile := "d:/abc.jpg"
    _, err := CopyFile(dstFile, srcFile)
    if err == nil {
       fmt.Printf("拷贝完成\n")
    } else {
       fmt.Printf("拷贝错误 err=%v\n", err)
    }
}

标签:文件,err,fmt,Golang,file,操作,main,os
From: https://blog.csdn.net/weixin_61080257/article/details/140012817

相关文章

  • 元素的简单操作
    针对元素的简单操作:(1)点击:element.click() (2)输入内容、清除内容:element.send_keys("内容")element.clear() (3)返回元素尺寸、坐标:element.sizeelement.location (4)获取元素标签文本:element.text (5)获取元素属性值:element.get_attribute("属性名") (6)检查元素:是......
  • Linux操作系统学习:day08
    内容来自:Linux介绍视频推荐:Linux基础入门教程-linux命令-vim-gcc/g++-动态库/静态库-makefile-gdb调试目录day0853、命令和编辑模式之间的切换54、命令模式到末行模式的切换与末行模式下的保存退出命令模式到末行模式的切换保存退出55、末行模式下的替换操作56、末......
  • Proteus仿真实例_基于51单片机的二层电梯控制系统(仿真文件+程序)24-51f-03
    一.系统概述1.电梯有上行和下行功能,有一个电机通过正反转控制,分别用两个指示灯表示;2.有开门和关门功能,有一个电机通过正反转控制,分别用两个指示灯表示;3.电梯内部具有开门、关门按钮,带相应指示灯:4.超重和延时报警功能,超重信号保持功能。二.仿真概述 1.进入仿真,数码管......
  • python 列表相关操作
    访问元素index(x):返回列表中第一个值为x的元素的索引。pythonfruits=['apple','banana','cherry']print(fruits.index('banana'))#输出:1count(x):返回列表中值为x的元素的个数。pythonnumbers=[1,2,2,3,2,4]print(numbers.count(2))#输......
  • 用pipenv解决pyinstaller打包文件过大的问题
    学会用pyinstaller打包python文件后,我发现直接大暴出来的文件内存特别大于是我上网搜了一些压缩方法,试过用upx,用了之后感觉有点麻烦,后面又看到了pipenv,感觉还不错首先用windows+r快捷键输入cmd打开命令管理器安装pipenv模块pipinstallpipenv-ihttps://pypi.tuna.tsinghua.......
  • 【C语言】--操作符详解
    ......
  • gdb调试coredump文件
    查看coredump文件位置cat/proc/sys/kernel/core_patterncoredumpctllistcoredumpctldumppid_xxx--outputxxx.coregdb调试gdb-cxxx.corexxx.bintuiup1down1disas设置coredump文件位置sudosysctl-wkernel.core_pattern="/home/bill/project/test_coredum......
  • MATLAB的.m文件与Python的.py文件:比较与互参
    simulinkMATLAB的.m文件与Python的.py文件:比较与互参相似之处**1.基本结构****2.执行逻辑****3.可读性和维护性**差异性**1.语法特性****2.性能和应用****3.开发环境**互相学习的可能性结论MATLAB的.m文件与Python的.py文件:比较与互参在编程语言的选择上,MA......
  • 用Python的pynput和pyautogui实现自动化操作
    哈喽,大家好,我是木头左!一、前言在日常生活和工作中,常常需要重复执行一些机械性的操作,如复制粘贴、点击按钮等。这些操作虽然简单,但频繁执行会浪费大量时间。为了提高效率,可以使用Python编写脚本来实现这些操作的自动化。本文将介绍如何使用pynput库记录各种按键操作,并结合pyaut......
  • 操作系统的接口以及实现
    目录操作系统的接口以及实现接口接口的定义系统调用的实现直观实现内核(用户)态,内核(用户)段系统调用的核心int0x80操作系统的接口以及实现接口接口的定义对于用户而言,使用计算机的方式有三种:1.命令行:linux中常用这种方式2.图形按钮:通过鼠标点击操作实现操控,例如windows3.应......