• Go语言文件操作


    基本介绍

    1. 输入流和输出流
      文件IO流

    2. os.File 封装所有文件相关操作,File是一个结构体

    官方文档

    文件操作

    打开文件和关闭文件

    打开文件使用的是os包下的Open,OpenFile函数

    func Open(name string) (file *File, err error)
    

    Open打开一个文件用于读取。如果操作成功,返回的文件对象的方法可用于读取数据;对应的文件描述符具有O_RDONLY模式。如果出错,错误底层类型是*PathError。

    func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
    

    OpenFile是一个更一般性的文件打开函数,大多数调用者都应用Open或Create代替本函数。它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。如果操作成功,返回的文件对象可用于I/O。如果出错,错误底层类型是*PathError。

    import "os"
    
    func OpenFileTest() {
    	file, err := os.Open("D:\GoWorkplace\src\project01\resources\test.txt") // 用open函数直接打开
    	if err != nil {
    		fmt.Println("open file err: ", err)
    		return
    	}
    
    	fmt.Println("file: %v", file)
    
    	err = file.Close()
    	if err != nil {
    		fmt.Println("close file err: ", err)
    	}
    }
    
    func OpenFileTest2() {
    	file, err := os.OpenFile("D:\GoWorkplace\src\project01\resources\test.txt", os.O_WRONLY | os.O_CREATE, 0666) // 用openFile函数直接打开
    	if err != nil {
    		fmt.Println("open file err: ", err)
    		return
    	}
    
    	fmt.Println("file: %v", file)
    
    	err = file.Close()
    	if err != nil {
    		fmt.Println("close file err: ", err)
    	}
    }
    

    关闭文件用Close函数,一般会结合defer,在函数执行完毕后自动释放文件句柄

    读取文件内容

    读取文件内容可以用bufio,ioutil两个包

    func FileReaderTest() {
    
    	file, err := os.Open("D:\GoWorkplace\src\project01\resources\test.txt")
    	if err != nil {
    		fmt.Println("open file err: ", err)
    		return
    	}
    
    	defer file.Close()
    
    	reader := bufio.NewReader(file)
    
    	for {
    
    		str, err := reader.ReadString('
    ')
    		fmt.Print(str)
    		if err == io.EOF {
    			break
    		}
    	}
    
    	fmt.Println("read finish...")
    }
    
    func IOUtilTest() {
    
    	file := "../resources/test.txt"
    	content, err := ioutil.ReadFile(file)
    	if err != nil {
    		fmt.Printf("read file err = %v 
    ", err)
    	}
    	fmt.Println(string(content))
    }
    

    修改文件内容

    可以用bufio包下的write函数,也可以使用ioutil包下的write函数

    
    func WriteFileTest3() {
    	filePath := "../resources/test.txt"
    	file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_APPEND, 0666) // 需要选择模式
    	if err != nil {
    		fmt.Printf("oped file err = %v 
    ", err)
    		return
    	}
    	defer file.Close()
    
    	str := "ABC! ENGLISH 
    "
    	writer := bufio.NewWriter(file)
    
    	for i := 0; i < 5; i++ {
    		writer.WriteString(str)
        }
        
        // bufio.writer 是缓存写入,所以需要Flush才能真正写入到文件
    	writer.Flush()
    
    }
    
    
    func ReadAndWriteFileTest() {
    
    	a := "../resources/a.txt"
    	test := "../resources/test.txt"
    
    	content, _ := ioutil.ReadFile(test)
    
    	ioutil.WriteFile(a, content, 0666) // 一次性创建清空写入文件
    }
    
    

    判断文件或文件夹是否存在

    可以使用os.Stat()函数返回单额错误值进行判断

    func Exists(path string) (bool error) {
        _, err := os.Stat(path)
        iif err == nil {
            return true, nil
        } 
        if os.IsNotExist(err) {
            return false, nil
        }
        return false, err
    }
    

    拷贝文件

    缺少很多err的判断

    func CopyFileTest(){
    	a := "../resources/a.txt"
    	b := "../resources/b.txt"
    
    	fa, _ := os.Open(a)
    	fb, _ := os.OpenFile(b, os.O_WRONLY | os.O_CREATE, 0666)
    
    	defer fa.Close()
    	defer fb.Close()
    
    	reader := bufio.NewReader(fa)
    	writer := bufio.NewWriter(fb)
    
    	io.Copy(writer, reader)
    }
    
  • 相关阅读:
    使用Apache搭建个人用户主页
    Linux搭建ftp服务器,并建立本地用户与虚拟用户
    Linux搭建FTP服务器,并建立匿名用户登录
    用虚拟机安装RHEL7
    基于OpenStack构建企业私有云(5)Neutron
    基于OpenStack构建企业私有云(3)Glance
    基于OpenStack构建企业私有云(1)实验环境准备
    基于OpenStack构建企业私有云(2)KeyStone
    python--003--百分号字符串拼接、format
    python--002--数据类型(set)
  • 原文地址:https://www.cnblogs.com/lxlhelloworld/p/14286045.html
Copyright © 2020-2023  润新知