• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Go标准库之读写文件(File)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Go标准库之读写文件(File)

创建一个空文件
package main

import (
    "log"
    "os"
)

func main() {
    file, err := os.Create("empty.txt")
    if err != nil {
        log.Fatal("create file err", err)
    }
    log.Println(file)
    file.Close()
}
获取文件的信息
package main

import (
    "fmt"
    "log"
    "os"
)

func main() {
    fileInfo, err := os.Stat("main.go")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("File Name:", fileInfo.Name())
    fmt.Println("Size in bytes:", fileInfo.Size())
    fmt.Println("Permissions:", fileInfo.Mode())
    fmt.Println("Last modified:", fileInfo.ModTime())
    fmt.Println("Is Directory:", fileInfo.IsDir())
    fmt.Printf("System interface type:%T\v\n", fileInfo.Sys())
    fmt.Printf("System info:%+v\n\n", fileInfo.Sys())
}
重命名和移动文件
package main

import (
    "log"
    "os"
)

func main() {
    originalPath := "empty.txt"
    newPath := "test.txt"
    err := os.Rename(originalPath, newPath)
    if err != nil {
        log.Fatal(err)
    }
}
删除文件
package main

import (
    "log"
    "os"
)

func main() {
    err := os.Remove("empty.txt")
    if err != nil {
        log.Fatal(err)
    }
}
打开关闭文件
package main

import (
    "log"
    "os"
)

func main() {
    //简单的打开文件
    file, err := os.Open("test.txt")
    if err != nil {
        log.Fatal(err)
    }
    file.Close()


    file, err = os.OpenFile("test.txt", os.O_APPEND, 0666)
    if err != nil {
        log.Fatal(err)
    }
    file.Close()
}
打开文件的一些其他的操作
os.O_RDONLY     //只读
os.O_WRONLY     //只写
os.O_RDWR       //读写文件
os.O_APPEND     //追加文件
os.O_CREATE     //不存在时创建文件
os.O_TRUNC      //打开时截断文件
检查文件是否存在
package main

import (
    "log"
    "os"
)

var (
    fileInfo *os.FileInfo
    err      error
)

func main() {
    fileInfo, err := os.Stat("test.txt")
    if err != nil {
        if os.IsNotExist(err) {
            log.Fatal("File does not exist.")
        }
    }
    log.Println("File does exist.File information:")
    log.Println(fileInfo)
}
检查文件的读写权限
package main

import (
    "log"
    "os"
)

func main() {
    file, err := os.OpenFile("test.txt", os.O_WRONLY, 0666)
    if err != nil {
        if os.IsPermission(err) {
            log.Println("Error:Write permission denied.")
        }
    }
    file.Close()
    file, err = os.OpenFile("test.txt", os.O_RDONLY, 0666)
    if err != nil {
        if os.IsPermission(err) {
            log.Println("Error:Read permission denied.")
        }
    }
    file.Close()
}
改变文件的权限、所有权和时间戳
package main

import (
    "log"
    "os"
    "time"
)

func main() {
    //改变权限
    err := os.Chmod("test.txt", 0777)
    if err != nil {
        log.Println(err)
    }

    //改变所有权 适用于linux, windows不支持
    err = os.Chown("test.txt", os.Getuid(), os.Getegid())
    if err != nil {
        log.Println(err)
    }

    //改变时间戳
    twoDaysFromNow := time.Now().Add(48 * time.Hour)
    lastAccessTime := twoDaysFromNow
    lastModifyTime := twoDaysFromNow
    err = os.Chtimes("test.txt", lastAccessTime, lastModifyTime)
    if err != nil {
        log.Println(err)
    }
}
复制文件
package main

import (
    "io"
    "log"
    "os"
)

func main() {
    //打开原文件
    originalFile, err := os.Open("test.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer originalFile.Close()

    //创建新文件
    newFile, err := os.Create("test_copy.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer newFile.Close()

    //文件复制
    bytes, err := io.Copy(newFile, originalFile)
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Copied %d bytes.", bytes)

    err = newFile.Sync()
    if err != nil {
        log.Fatal(err)
    }
}
移动位置
package main

import (
    "fmt"
    "log"
    "os"
)

func main() {
    file, err := os.Open("test.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()
    var offset int64 = 5

    var whence int = 0
    newPos, err := file.Seek(offset, whence)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("Just moved to 5:", newPos)

    newPos, err = file.Seek(-2, 1)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("Just moved back two:", newPos)

    currentPos, err := file.Seek(0, 1)
    fmt.Println("current pos:", currentPos)

    newPos, err = file.Seek(0, 0)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("position after seek 0,0:", newPos)
}
向文件中写入字节
package main

import (
    "log"
    "os"
)

func main() {
    file, err := os.OpenFile("test.txt", os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0666)
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    bytes := []byte("测试写入功能!")
    bw, err := file.Write(bytes)
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Wrote %d bytes.\n", bw)
}
快速写入文件
package main

import (
    "io/ioutil"
    "log"
)

func main() {
    err := ioutil.WriteFile("test.text", []byte("测试快速写入功能!"), 0666)
    if err != nil {
        log.Fatal(err)
    }
}
在写入时使用缓存
package main

import (
    "bufio"
    "log"
    "os"
)

func main() {
    file, err := os.OpenFile("test.txt", os.O_WRONLY, 0666)
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    buffer := bufio.NewWriter(file)
    bw, err := buffer.Write([]byte{65, 66, 67})
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Bytes written:%d\n", bw)
    bw, err = buffer.WriteString("\n写入字符串")
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Bytes written: %d\n", bw)

    unFlushedBuffer := buffer.Buffered()
    log.Printf("Bytes buffered:%d\n", unFlushedBuffer)

    ba := buffer.Available()
    log.Printf("Available buffer: %d\n", ba)

    buffer.Flush()

    buffer.Reset(buffer)

    ba = buffer.Available()
    log.Printf("Availabled buffer:%d\n", ba)

    buffer = bufio.NewWriterSize(buffer, 8000)
    ba = buffer.Available()
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Available buffer: %d\n", ba)

}
从文件中读取n个字节
package main

import (
    "log"
    "os"
)

func main() {
    file, err := os.Open("test.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()
    //从文件中读取16个字节
    bytes := make([]byte, 16)
    br, err := file.Read(bytes)
    if err != nil {
        log.Fatal(err)
    }

    log.Printf("number of bytes read: %d\n", br)
    log.Printf("Data read: %s\n", bytes)
}
读取文件中全部内容
data, err := ioutil.ReadAll(file)
快速读取文件到内存中
package main

import (
    "log"
    "io/ioutil"
)

func main() {
    data, err := ioutil.ReadFile("test.txt")
    if err != nil {
        log.Fatal(err)
    }

    log.Printf("Data read: %s\n", data)
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go语言GMP模型发布时间:2022-07-10
下一篇:
论go语言中goroutine的使用发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap