zoukankan      html  css  js  c++  java
  • GO基础之文件操作

    一、文件操作的基本API

    func main() {
        //绝对路径
        fileInfo , err := os.Stat("E:/a.txt")
        fileInfo , err = os.Stat("E:/")
        if err !=nil {
            fmt.Println("err:" , err.Error())
        } else {
            fmt.Printf("%T 
    " , fileInfo)
            fmt.Printf("%v 
    " , fileInfo)
            //文件名
            fmt.Println(fileInfo.Name())
            //是否是目录
            fmt.Println(fileInfo.IsDir())
            //文件尺寸大小
            fmt.Println(fileInfo.Size())
            //mode 权限
            fmt.Println(fileInfo.Mode())
            //文件最后修改时间
            fmt.Println(fileInfo.ModTime())
        }
    }

    文件路径:

    • 1、绝对路径:absolute
    • 2、相对路径:relative 都是相当于当前的工程  (.当前目录   ..上一层)

    (1)、判断是否是绝对路径filepath.IsAbs()
    (2)、获取相对路径filepath.Rel()
    (3)、获取绝对路径filepath.Abs()
    (4)、拼接路径path.Join()

    文件操作:
    1.创建文件夹,如果文件夹存在,创建失败

    • os.MKdir()
    • os.MKdirAll()

    2.创建文件:如果文件存在,会覆盖

    • os.Create()-->*file

    3.打开文件:

    • os.Open(filename)
    • os.OpenFile(filename,mode,perm)

    4.关闭文件:

    • file.Close()

    5.删除:

    • os.Remove()
    • os.RemoveAll()
    package main
    
    import (
        "os"
        "fmt"
    )
    
    func main() {
        /*
        文件操作:
            1.创建文件夹,如果文件夹存在,创建失败
                os.MKdir()
                os.MKdirAll()
    
            2.创建文件:如果文件存在,会覆盖
                os.Create()-->*file
    
            3.打开文件:
                os.Open(filename)
                os.OpenFile(filename,mode,perm)
            4.关闭文件:
                file.Close()
            5.删除:
                os.Remove()
                os.RemoveAll()
         */
        //     1、创建目录
        fileName1 := "./test1"
        err := os.Mkdir(fileName1, os.ModePerm)
        if err != nil {
            fmt.Println("err:", err.Error())
        } else {
            fmt.Printf("%s 目录创建成功!
    ", fileName1)
        }
    
        fileName2 := "./test2/abc/xyz"
        err = os.MkdirAll(fileName2, os.ModePerm)
        if err != nil {
            fmt.Println("err:", err.Error())
        } else {
            fmt.Printf("%s 目录创建成功!
    ", fileName2)
        }
    
        //2、创建文件.如果文件已经存在,则文件被覆盖
        fileName3 := "./test1/abc.txt"
        file1, err := os.Create(fileName3)
        if err != nil {
            fmt.Println("err:", err.Error())
        } else {
            fmt.Printf("%s 创建成功!%v 
    ", fileName3, file1)
        }
    
        //    3、打开文件
        file2, err := os.Open(fileName3)
        if err != nil {
            fmt.Println("err:", err.Error())
        } else {
            fmt.Printf("%s 打开成功!%v 
    ", fileName3, file2)
        }
    
        /*
        第一个参数:文件名称
        第二个参数:文件的打开方式
            O_RDONLY:只读模式(read-only)
            O_WRONLY:只写模式(write-only)
            O_RDWR:读写模式(read-write)
            O_APPEND:追加模式(append)
            O_CREATE:文件不存在就创建(create a new file if none exists.)
        第三个参数:文件的权限:文件不存在创建文件,需要指定权限
         */
        fileName4 := "./test1/abc2.txt"
        file4, err := os.OpenFile(fileName4, os.O_RDWR|os.O_CREATE, os.ModePerm)
        if err != nil {
            fmt.Println("err:", err.Error())
        } else {
            fmt.Printf("%s 打开成功!%v 
    ", fileName4, file4)
        }
    
        //4、关闭文件,程序与文件的联系断开
        file4.Close()
    
        //    5、删除文件和目录
        fileName5 := "./test1"
        err = os.Remove(fileName5)
        if err != nil {
            fmt.Println(err)
        } else {
            fmt.Printf("%s 删除成功!" , fileName5)
        }
    
        err = os.RemoveAll(fileName5)
        if err != nil {
            fmt.Println(err)
        } else {
            fmt.Printf("%s 删除成功!" , fileName5)
        }
    }
    View Code

    文件读写 

    /**
    2.读取文件file.Read([]byte)-->n,err 从文件中开始读取数据,存入到byte切片中,返回值n是本次实际读取的数据量如果读取到文件末尾,n为0,err为EOF:end of file
     */
    func readFile(fileName string){
        file2,err:=os.OpenFile(fileName, os.O_RDWR|os.O_CREATE, os.ModePerm)
        if err!=nil{
            fmt.Println(file2);
        }else {
            bs:=make([]byte,8,1024*8);
            n:= -1;
            str:="";
            for{
                n,err=file2.Read(bs);
                fmt.Printf("n:%v 
    ",n)
                if n==0||err==io.EOF{
                    fmt.Println("read file end")
                    break;
                }
                str= strings.Join([]string{str,string(bs[:n])},"")
            }
            fmt.Println(str)
        }
        //3、关闭文件
        file2.Close()
    }
    func writeFile(fileName string){
        str:="I Love China 我爱中国";
        bs:=[]byte(str);
        file2,err:=os.OpenFile(fileName, os.O_RDWR|os.O_CREATE, os.ModePerm)
        if err!=nil{
            fmt.Println(file2);
        }else {
            file2.Write(bs);
        }
        file2.Close();
    }
    View Code

    二、ioutil 包

    /*
    ioutil包:
    ReadFile() //读取文件中的所有的数据,返回读取的字节数组
    WriteFile() //向指定文件写入数据,如果文件不存在,则创建文件,写入数据之前清空文件
    ReadDir() //读取一个目录下的子内容:子文件和子目录,但是仅有一层
    TempDir() //在当前目录下,创建一个以指定字符串为前缀的临时文件夹,并返回文件夹路径
    TempFile() //在当前目录下,创建一个以指定字符串为前缀的文件,并以读写模式打开文件,并返回os.File指针对象
    */

    package main
    
    import (
        "io/ioutil"
        "fmt"
        "os"
    )
    
    func main() {
        /*
        ioutil包:
            ReadFile()   //读取文件中的所有的数据,返回读取的字节数组
            WriteFile()  //向指定文件写入数据,如果文件不存在,则创建文件,写入数据之前清空文件
            ReadDir()    //读取一个目录下的子内容:子文件和子目录,但是仅有一层
            TempDir()   //在当前目录下,创建一个以指定字符串为前缀的临时文件夹,并返回文件夹路径
            TempFile()   //在当前目录下,创建一个以指定字符串为前缀的文件,并以读写模式打开文件,并返回os.File指针对象
         */
        //1、ReadFile()   //读取文件中的所有的数据,返回读取的字节数组
        fileName1 := "./files/blockchain.txt"
        data, err := ioutil.ReadFile(fileName1)
        if err != nil {
            fmt.Println("文件打开异常", err.Error())
        } else {
            fmt.Println(string(data))
        }
    
        //2、WriteFile()  //向指定文件写入数据,如果文件不存在,则创建文件,写入数据之前清空文件
        fileName2 := "./files/xyz.txt"
        s1 := "Steven陪你学区块链"
        err = ioutil.WriteFile(fileName2, []byte(s1), 0777)
        if err != nil {
            fmt.Println("写入文件异常", err.Error())
        } else {
            fmt.Println("文件写入OK!")
        }
    
        //3、文件拷贝
        err = ioutil.WriteFile(fileName2 , data , os.ModePerm)
        if err != nil {
            fmt.Println("文件拷贝异常", err.Error())
        } else {
            fmt.Println("文件拷贝成功!")
        }
    
        //4、ReadDir()    //读取一个目录下的子内容:子文件和子目录,但是仅有一层
        dirName := "./"
        fileInfos , err := ioutil.ReadDir(dirName)
        if err != nil {
            fmt.Println("目录遍历异常", err.Error())
        } else {
            for i , v := range fileInfos {
                fmt.Println(i , v.Name() , v.IsDir() , v.Size() , v.ModTime())
            }
        }
    
        //5、TempDir()   //在当前目录下,创建一个以指定字符串为前缀的临时文件夹,并返回文件夹路径
        filename , err := ioutil.TempDir("./" , "temp")
        if err != nil {
            fmt.Println("创建目录失败" , err.Error())
        } else {
            fmt.Println(filename)
        }
    
        //6、TempFile()   //在当前目录下,创建一个以指定字符串为前缀的文件,并以读写模式打开文件,并返回os.File指针对象
        file1 , err := ioutil.TempFile(filename , "temp")
        if err != nil {
            fmt.Println("创建文件失败" , err.Error())
        } else {
            file1.WriteString("写入内容:" + file1.Name())
        }
        file1.Close()
    }
    View Code
  • 相关阅读:
    面向过程编程
    生成器
    迭代器
    装饰器
    函数对象与闭包
    名称空间和作用域
    Django中的as_view方法源码分析
    DRF3序列化反序列化
    DRF4级联与外键字段
    django--BBS项目,后端业务逻辑整理
  • 原文地址:https://www.cnblogs.com/jalja/p/11854152.html
Copyright © 2011-2022 走看看