go 文件操作

文件操作

文件是数据源(保存数据的地方),主要作用就是保存数据;我们常用的mysql数据库底层也是将数据存储到文件中的

文件在程序中是以流的形式来操作的
在这里插入图片描述
流: 数据在数据源(文件)和程序(内存)之间经历的路径
输入流: 数据从数据源(文件)到程序(内存)的路径
输出流: 数据从程序(内存)到数据源(文件)的路径

package main

import (
	"fmt"
	"os"
)
//这种方式适用于读取文件比较大的,带有缓冲
func main() {
	fmt.Println("文件操作")
	file, err := os.Open("/Users/go/practice/2023/file/demo1/a.text")
	if err != nil {
		fmt.Println("打开文件失败 error:", err)
	}
	//打印发现,file就是一个指针*File
	fmt.Printf("file=%v", file) //file=&{0xc000056180}
	err = file.Close()
	if err != nil {
		fmt.Println("关闭文件失败 error", err)
	}

}

ioutil.ReadFile一次性将文件读取到位

package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
	//ReadFile没有open和close 所以不需要我们写,他的内部是实现了这两个方法的
	file_content, err := ioutil.ReadFile("/Users/go/practice/2023/file/a.text")
	if err != nil {
		fmt.Println("文件读取错误,error:", err)
	}
	fmt.Println("文件内容是:", file_content)         //这里返回的是byte切片
	fmt.Println("文件内容是:", string(file_content)) //将byte切片转换成字符串
}

写文件操作实例
func OpenFile(name string,flag int,perm FileMode)(file *File,err error)
参数解释:
name:文件名
flag:文件的打开模式

在这里插入图片描述
在这里插入图片描述

package main

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

func main() {
	filePath := "/Users/go/practice/2023/file/aa.text"
	file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0666)
	if err != nil {
		fmt.Println("文件打开错误:", err)
	}
	defer file.Close() //程序执行完需要将文件关闭
	str := "hello world\n"
	writer := bufio.NewWriter(file)
	for i := 0; i < 5; i++ {
		res, err := writer.WriteString(str)
		if err != nil {
			fmt.Println("写入文件失败,err:", err)
			return
		}
		fmt.Println(res)
	}
	//WriteString 是将数据写到缓存区的
	//Flush方法是将缓存区的数据刷到磁盘中
	writer.Flush()

}

//判断文件是否存在
func PathIsExist(path string) (bool, error) {
	_, err := os.Stat(path)
	if err == nil {
		return true, nil
	}
	if os.IsNotExist(err) {
		return false, nil
	}
	return false, err
}
//文件操作拷贝函数,图片、视频、mp3等
package main

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

func CopyFile(dstFileName string, srcFileName string) (written int64, err error) {
	srcFile, err := os.Open(srcFileName) //将已经存在的文件打开

	if err != nil {
		fmt.Println("open file err=%v\n", err)
	}
	defer srcFile.Close() //操作结束后,close掉防止内存溢出

	reader := bufio.NewReader(srcFile) //读取文件的内容

	//打开新的文件,不存在的话就直接创建,参数分别是:文件名,写或者创建文件,文件权限0666
	dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY|os.O_CREATE, 0666)
	if err != nil {
		fmt.Println("打开文件错误err:", err)
		return
	}

	writer := bufio.NewWriter(dstFile) //获取到writer
	defer dstFile.Close()              //操作结束后关闭

	return io.Copy(writer, reader)
}

func main() {
	file := "/Users/go/practice/2023/file/a.jpg"      //已经存在的文件
	copy_path := "/Users/go/practice/2023/file/b.jpg" //不存在的文件
	res, err := CopyFile(copy_path, file)
	if err != nil {
		fmt.Println("拷贝文件失败err:", err)
	} else {
		fmt.Println(res)
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值