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

摘要:
Go标准库之读写文件创建一个空文件packagemainimportfuncmain(){file,err:=os.Createiferr!=nil{log.Fatal}fmt.Printlnfmt.Printlnfmt.Printlnfmt.Printlnfmt.Printlnfmt.Printffmt.Printf}重命名和移动文件packagemainimportfuncmain(){originalPath:="empty.txt"newPath:="test.txt"err:=os.Renameiferr!=nil{log.Fatal}file.Close()}打开文件的一些其他的操作os.O_RDONLY//只读os.O_WRONLY//只写os.O_RDWR//读写文件os.O_APPEND//追加文件os.O_CREATE//不存在时创建文件os.O_TRUNC//打开时截断文件检查文件是否存在packagemainimportvarfuncmain(){fileInfo,err:=os.Statiferr!=nil{ifos.IsPermission{log.Println}}file.Close()}改变文件的权限、所有权和时间戳packagemainimportfuncmain(){//改变权限err:=os.Chmodiferr!=nil{log.Println}}复制文件packagemainimportfuncmain(){//打开原文件originalFile,err:=os.Openiferr!

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:%Tv
", fileInfo.Sys())
    fmt.Printf("System info:%+v

", 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.
", 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
", bw)
    bw, err = buffer.WriteString("
写入字符串")
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Bytes written: %d
", bw)

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

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

    buffer.Flush()

    buffer.Reset(buffer)

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

    buffer = bufio.NewWriterSize(buffer, 8000)
    ba = buffer.Available()
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Available buffer: %d
", 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
", br)
    log.Printf("Data read: %s
", 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
", data)
}

免责声明:文章转载自《Go标准库之读写文件(File)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SpringBootSecurity学习(20)前后端分离版之OAuth2.0刷新tokenC#图解教程 第二十章 异步编程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

机器重启 查看crontab执行历史记录crontab没有执行

Sep 17 19:01:01 d run-parts(/etc/cron.hourly)[8452]: finished 0anacronSep 17 19:10:01 d CROND[9059]: (root) CMD (cd /root/tools/trunk/plugins/personas; python sync_db.py &>...

C语言单链表实现19个功能完全详解

 * list.c//#include "stdafx.h"#include "stdio.h"#include <stdlib.h>#include "string.h"typedef int elemType ;/****************************************************************...

FFmpeg流媒体处理-收流与推流

本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10623968.html 1. 简介 流媒体是使用了流式传输的多媒体应用技术。如下是维基百科关于流媒体概念的定义: 流媒体 (streaming media) 是指将一连串的媒体数据压缩后,经过网络分段发送数据,在网络上即时传输影音以供观赏的一种技...

FFmpeg在Linux下编译使用

1.FFmpeg编译 1.1.安装yasm 这里我是直接通过ubuntu包安装的,当然也可以通过编译源码来安装。 sudo apt-get install yasm 1.2.下载FFmpeg git clone https://git.ffmpeg.org/ffmpeg.git 1.3.配置、编译FFMPEG ./configure --prefix=ho...

内表、结构赋值转换规则

内表转换规则... 57 C语言中的结构对齐... 57 ABAP结构体对齐... 58 结构体相互赋值转换规则... 59 MOVE-CORRESPONDING(结构体赋值)... 62 内表转换规则 内表只能被转换成其他内表,而不能转换成结构或基本类型。 一个内表能否转换成其他内表与内表中的现有数据行没有关系,而是看两个内表的行结构是否可转换...

杭电1873--看病要排队

看病要排队 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5877    Accepted Submission(s): 2417 Problem Description 看病要排队这个是地球人都...