Go语言之文件

一 、读文件

1.io包主要有两大接口Reader和Writer,分别定义了read()和write()方法
2.这两个接口有os.File,fmt包,bufio包,strings包中都有实现

package main

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

func main() {
	/**
	带缓冲区读取文件
	*/
	//file是一个指针,也称file对象,file文件句柄
	file, err := os.Open("/Users/seeker/Desktop/go.rtf")
	if err != nil {
		fmt.Printf("error=%v", err)
	}
	//函数退出需要close(),否则内存泄露
	defer file.Close()
	//默认缓冲区4096,读一部分处理一部分
	reader := bufio.NewReader(file)
	for {
		str, err := reader.ReadString('\n')
		if err == io.EOF { //表示读到文件末尾
			break
		}
		fmt.Print(str)
	}

	/**
	一次性将文件读取到位,适合文件较小情况
	*/
	content, err1 := ioutil.ReadFile("/Users/seeker/Desktop/go.rtf")
	if err1 != nil {
		fmt.Printf("open file fail,err=%v", err1)
	}
	fmt.Printf("%v\n", content)          //content 是 []byte 切片
	fmt.Printf("%v\n", string(content))  //[]byte转string
	
}

二、写文件

package main

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

func main() {
	//文件名;文件模式,此例为只读,未存在文件就创建文件;权限控制,四个占位符,仅win无效
	file, err := os.OpenFile("/Users/seeker/Desktop/go3.txt", os.O_WRONLY|os.O_CREATE, 4444)
	if err != nil {
		fmt.Printf("err = %v\n", err)
		return
	}
	defer file.Close()
	//带缓存
	write := bufio.NewWriter(file)
	for i := 0; i < 5; i++ {
		write.WriteString("Hello Go\n")
	}
	//内容是先写入缓存的,此方法将缓冲的数据真正写入文件
	write.Flush()
}

三、拷贝文件

package main

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

func main() {
	dstFileName := "/Users/seeker/Desktop/abc.png"
	srcFileName := "/Users/seeker/Desktop/10公里.png"
	_, err := copyFile(dstFileName, srcFileName)
	if err != nil {
		fmt.Printf("copy fail ,err=%v\n", err)
	} else {
		fmt.Println("拷贝成功")
	}
}

/**
    拷贝图片,音频,视频
	dstFileName 目的文件路径  srcFileName 待拷贝文件路径
*/
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()
	reader := bufio.NewReader(srcfile)

	dstFile, err := os.OpenFile(dstFileName, os.O_RDWR|os.O_CREATE, 4444)
	if err != nil {
		fmt.Printf("open file,err=%v\n", err)
		return
	}
	defer dstFile.Close()
	writer := bufio.NewWriter(dstFile)
	return io.Copy(writer, reader)
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值