zoukankan      html  css  js  c++  java
  • (转载)go语言文件操作 --自己用来学习

    go语言操作文件的open、write、create、close

     

    func Open(name string) (file *File, err error),*File 是实现了 io.Reader这个接口

    byte[] 转化为 bytes.Buffer:bytes.NewBuffer([]byte).

    一、建立与打开

    建立文件函数:
     
    func Create(name string) (file *File, err Error)
     
    func NewFile(fd int, name string) *File
     
    具体见官网:http://golang.org/pkg/os/#Create
     
    打开文件函数:
     
    func Open(name string) (file *File, err Error)
     
    func OpenFile(name string, flag int, perm uint32) (file *File, err Error)
    具体见官网:http://golang.org/pkg/os/#Open
     
     

    二、写文件

    写文件函数:
     
    func (file *File) Write(b []byte) (n int, err Error)
     
    func (file *File) WriteAt(b []byte, off int64) (n int, err Error)
     
    func (file *File) WriteString(s string) (ret int, err Error)
    具体见官网:http://golang.org/pkg/os/#File.Write 
     
    写文件示例代码:
    复制代码
     package main
    import (
            "os"
            "fmt"
    )
    func main() {
            userFile := "test.txt"
            fout,err := os.Create(userFile)
            defer fout.Close()
            if err != nil {
                    fmt.Println(userFile,err)
                    return
            }
            for i:= 0;i<10;i++ {
                    fout.WriteString("Just a test!
    ")
                    fout.Write([]byte("Just a test!
    "))
            }
    }
    复制代码
     

    三、读文件

    读文件函数:
     
    func (file *File) Read(b []byte) (n int, err Error)
     
    func (file *File) ReadAt(b []byte, off int64) (n int, err Error)
     
    具体见官网:http://golang.org/pkg/os/#File.Read
     
    读文件示例代码:
    复制代码
    package main
    import (
            "os"
            "fmt"
    )
    func main() {
            userFile := "test.txt"
            fin,err := os.Open(userFile)
            defer fin.Close()
            if err != nil {
                    fmt.Println(userFile,err)
                    return
            }
            buf := make([]byte, 1024)
            for{
                    n, _ := fin.Read(buf)
                    if0 == n { break }
                    os.Stdout.Write(buf[:n])
            }
    }
    复制代码
     

    四、删除文件

    函数:
     
    func Remove(name string) Error
    ------------------------------------------------------------------------------------------------
    使用os库os.Open os.Create。
    复制代码
    package main
     
    import (
        "io"
        "os"
    )
     
    func main() {
        fi, err := os.Open("input.txt")
        if err != nil { panic(err) }
        defer fi.Close()
     
        fo, err := os.Create("output.txt")
        if err != nil { panic(err) }
        defer fo.Close()
     
        buf := make([]byte, 1024)
        for {
            n, err := fi.Read(buf)
            if err != nil && err != io.EOF { panic(err) }
            if n == 0 { break }
     
            if n2, err := fo.Write(buf[:n]); err != nil {
                panic(err)
            } else if n2 != n {
                panic("error in writing")
            }
        }
    }
    复制代码
     
    使用bufio库
    复制代码
    package main
     
    import (
        "bufio"
        "io"
        "os"
    )
     
    func main() {
        fi, err := os.Open("input.txt")
        if err != nil { panic(err) }
        defer fi.Close()
        r := bufio.NewReader(fi)
     
        fo, err := os.Create("output.txt")
        if err != nil { panic(err) }
        defer fo.Close()
        w := bufio.NewWriter(fo)
     
        buf := make([]byte, 1024)
        for {
            n, err := r.Read(buf)
            if err != nil && err != io.EOF { panic(err) }
            if n == 0 { break }
     
            if n2, err := w.Write(buf[:n]); err != nil {
                panic(err)
            } else if n2 != n {
                panic("error in writing")
            }
        }
     
        if err = w.Flush(); err != nil { panic(err) }
    }
    复制代码
    使用ioutil库
    复制代码
    package main
     
    import (
        "io/ioutil"
    )
     
    func main() {
        b, err := ioutil.ReadFile("input.txt")
        if err != nil { panic(err) }
     
        err = ioutil.WriteFile("output.txt", b, 0644)
        if err != nil { panic(err) }
    }
    复制代码

    五、遍历文件夹

    复制代码
    package main
    import (
        "path/filepath"
        "os"
        "fmt"
        "flag"
    )
    
    func getFilelist(path string) {
            err := filepath.Walk(path, func(path string, f os.FileInfo, err error) error {
                    if ( f == nil ) {return err}
                    if f.IsDir() {return nil}
                    println(path)
                    return nil
            })
            if err != nil {
                    fmt.Printf("filepath.Walk() returned %v
    ", err)
            }
    }
    
    func main(){
            flag.Parse()
            root := flag.Arg(0)
            getFilelist(root)
    }
  • 相关阅读:
    使用SQL Server Management Studio 创建数据库备份作业
    ClickOnce 获取客户端发布版本号
    在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求
    找不到方法:“Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boolean)
    常用操作类
    数据库命名规范
    expression动态构成
    C# 获得当前方法 和 方法调用链 的 方法
    EF架构封装类
    基于微软企业库的分层代码框架
  • 原文地址:https://www.cnblogs.com/wtf0215-golang/p/5032701.html
Copyright © 2011-2022 走看看