Go-文件操作

一.文件基本介绍

         

:数据在数据源(文件)和程序(内存)之间经历的路径

输入流:数据从数据源(文件)到程序(内存)的路径

输出流:数据从程序(内存)到数据源(文件)的路径

二.常用的文件操作函数和方法

    1.打开一个文件进行读操作

       os.Open(name string) (*File,erroe)

    2.关闭一个文件

       file.Close()

          

二.读文件操作应用实例

    1.读取文件的内容并显示在终端(带缓冲区的方式),

使用os.Open,file.Close,bufio.NewReader(),reader.ReadString函数和方法

       

  2.读取文件的内容并显示在终端(使用ioutil一次将整个文件读入到内存中),这种方式适用于文件不大的情况,相关方法和函数(ioutil.ReadFile)

三.写文件操作应用实例

     基本介绍

      

说明:os.OpenFile是一个更一般性的文件打开函数,它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。如果操作成功,返回的文件对象可用于I/O。如果出错,错误底层类型是*PathError

第二个参数:文件打开模式(可以组合):

基本应用实例-方式一

使用os.OpenFile(),bufio.NewWriter(),*Writer的方法*WriterString

1.创建一个文件输入5句hello world

 2.打开一个存在的文件,将原来的内容覆盖成新的内容

 3.打开一个存在的文件,在原来的内容上追加内容

 4.打开一个存在的文件,将原来的内容读出显示在终端,并且追加几句语句

 

编写一个程序,将一个文件的内容,写入到另外一个文件。 

 

四.判断文件是否存在

     golang判断文件或文件夹是否存在的方法为使用os.Stat()函数返回的错误值进行判断:

     1.如果返回的错误为nil,说明文件或文件夹存在

     2.如果返回的错误类型使用os.IsNotExist()判断为true,说明文件或者文件夹不存在

     3.如果返回的错误为其他类型,则不确定是否存在

  

 

将一张图片/电影/MP3拷贝到另外一个目录下 e:/abc.jpg io包

func Copy(dst Writer,src Reader)(written int64, err error)

 

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)

	//打开disFileName
	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)

	return io.Copy(writer, reader)
}

func main() {
	//将d:1.jpg 文件拷贝到e:/2.jpg

	//1.调用函数完成文件拷贝
	srcFile := "d:/1.jpg"
	dstFile := "d:/2.jpg"
	_, err := CopyFile(dstFile, srcFile)
	if err == nil {
		fmt.Println("拷贝完成")
	} else {
		fmt.Println("拷贝错误")
	}
}

统计英文、数字、空格和其它字符数量

package main

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

// 定义一个结构体,用于保存统计结果
type CharCount struct {
	Ch    int
	Num   int
	Space int
	Other int
}

func main() {
	//打开一个文件,创建一个Reader
	//每读取一行,就去统计
	//将结果保存到结构体中
	fileName := "d:/abc.txt"
	file, err := os.Open(fileName)
	if err != nil {
		fmt.Printf("open file err=%v\n", err)
		return
	}
	defer file.Close()
	//定义一个CharCount实例
	var count CharCount
	//创建一个Reader
	reader := bufio.NewReader(file)

	//开始循环的读取fileName的内容
	for {
		str, err := reader.ReadString('\n')
		if err == io.EOF {
			break
		}
		//遍历str ,进行统计
		for _, v := range str {

			switch {
			case v >= 'a' && v <= 'z':
				fallthrough // 穿透
			case v >= 'A' && v <= 'Z':
				count.Ch++
			case v == ' ' || v == '\t':
				count.Space++
			case v >= '0' && v <= '9':
				count.Num++
			default:
				count.Other++
			}
		}
	}
	fmt.Printf("字符的个数=%v 数字的个数=%v 空格的个数=%v 其它字符个数=%v",
		count.Ch, count.Num, count.Space, count.Other)

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老实憨厚的腾锅锅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值