go之操作文件

读取文件

func ReadFile1() {
    //这个读取文件最简单的办法。并且中文不会乱码。适用于读取小文件。
    bytes, err := ioutil.ReadFile("./lyric.txt")
    if err != nil {
        fmt.Println("ReadFile error", err)
    }
    fmt.Println(string(bytes))

}
func ReadFile2() {
    // 利用bufio读取文件。带有缓冲功能,性能更好!!
    //os.Open是只读模式
    fileObj, err := os.Open("./lyric.txt")
    if err != nil {
        panic(err)
    }
    //一般情况下使用这种方式关闭文件
    defer fileObj.Close()

    //需要将文件对象传进去
    reader := bufio.NewReader(fileObj)
    for {
        //按行读取
        row, err := reader.ReadString('\n') //参数是字符,不是字符串
        if err == io.EOF {
            break
        }
        if err != nil {
            panic(err)
        }
        fmt.Printf("%v", row)
    }
}

写入文件

写入文件的话,我们就需要使用openFile这个方法打开文件
在开始之前呢,先记一下下面几种模式
os.O_WRONLY 只写
os.O_RDONLY 只读
os.O_CREATE 如果文件不存在,则创建文件
os.O_RDWR 可读可写
os.O_TRUNC 清空
os.O_APPEND 追加文件

func WriteFile1() {
    //O_CREATE:如果不存在就创建 O_APPEND:追加 O_WRONLY:只写
    fileObj, err := os.OpenFile("./lyric.txt", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
    if err != nil {
        panic(err)
    }
    defer fileObj.Close()
    w_content := "整个世界越好一起逛\n"
    //Write方法需要将字符串转成字节
    fileObj.Write([]byte(w_content))
    //WriteString直接写入字符串
    fileObj.WriteString(w_content)
}
func WriteFile2() {
    //O_CREATE:如果不存在就创建 O_APPEND:追加 O_WRONLY:只写
    fileObj, err := os.OpenFile("./lyric.txt", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
    if err != nil {
        panic(err)
    }
    defer fileObj.Close()
    w_content := "因为捞鱼的蠢游戏\n"
    writer := bufio.NewWriter(fileObj)
    //下面两种写入方式都可以
    writer.Write([]byte(w_content))
    writer.WriteString(w_content)
    //写完必须刷入
    writer.Flush()
}
//这个是最简单的,但是只能覆盖,不能追加
func WriteFile3() {
    w_content := "you are good dog!\n"
    //文件不存在会自动创建,存在的话会清空原有的文件内容再执行写入操作
    err := ioutil.WriteFile("./lyric.txt", []byte(w_content), 0666)
    if err != nil {
        panic(err)
    }
}

复制拷贝文件

//复制拷贝文件
func copyFile(dstFileName string, srcFileName string) (written int64, err error) {
	srcFile, err := os.Open(srcFileName)
	if err != nil {
		fmt.Printf("open file error = %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 error = %v\n", err)
		return
	}
	//通过dstFile,获取到WRITER
	writer := bufio.NewWriter(dstFile)
	//writer.Flush()
	defer dstFile.Close()
	return io.Copy(writer, reader)
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值