创建文件

import (
    "fmt"
    "os"
)

func main() {
    //创建文件时,需要指定文件的存储路径以及文件名称
    file, err := os.Create("D:/Test/a.txt")

    if err != nil {
        fmt.Println(err)
    }

    //对文件进行操作

    //关闭 defer表示延迟执行
    defer file.Close()
}

WriteString方法

func main() {
    //创建文件时,需要指定文件的存储路径以及文件名称
    file, err := os.Create("D:/Test/a.txt")

    if err != nil {
        fmt.Println(err)
    }
    defer file.Close()
    //对文件进行操作
    n, err := file.WriteString("aaaaaaaaaaa")
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(n)
}

Write方法

func main() {
    //创建文件时,需要指定文件的存储路径以及文件名称
    file, err := os.Create("D:/Test/a.txt")

    if err != nil {
        fmt.Println(err)
    }
    defer file.Close()
    //对文件进行操作
    var str string = "Hello Wprld"
    n, err := file.Write([]byte(str)) //需要将字符串转换成字节切片
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(n)
}

WriteAt方法,是在指定位置写入文件内容

func main() {
    //创建文件时,需要指定文件的存储路径以及文件名称
    file, err := os.Create("D:/Test/a.txt")

    if err != nil {
        fmt.Println(err)
    }
    defer file.Close()
    //对文件进行操作
    var str string = "Hello World002"
    file.WriteString("Hello World001")
    n, err := file.WriteAt([]byte(str), 2) //第二个参数表示指定位置写入数据
    if err != nil {
        fmt.Println(err)
    }
    fmt.Print(n)
}

openFile方法

openFile有3个参数,

第一个参数表示打开文件的路径,

第二个参数表示:模式,常见的模式有O_RDONLY(只读模式),O_WRONLY(只写模式),O_RDWR(可读可写),O_APPEND(追加模式)

O_RDWR:在文件开头进行替换

O_WRONLY:在文件开头进行替换

O_APPEND:在文件末尾处进行追加

第三个参数表示:权限,取值范围(0——7)

表示如下:

0:表示没有任何权限

1:执行权限

2:写权限

4:读权限

其他数字为1,2,4权限相互组合

func main() {
    file, err := os.OpenFile("D:/Test/a.txt", os.O_APPEND, 6)
    if err != nil {
        fmt.Println(err)
    }
    defer file.Close()
    num, err := file.WriteString("Hello World001")
    fmt.Println("num = ", num)
    if err != nil {
        fmt.Println(err)
    }
}

文件读取

open方法与openFile方法的不同

open方法是封装openFile方法的方法,open方法直接return OpenFile(name, os.O_RDONLY, 0)

func main() {
    //1.打开要读取的文件
    file, err := os.OpenFile("D:/Test/a.txt", os.O_RDONLY, 0)
    if err != nil {
        fmt.Println(err)
    }
    defer file.Close()
    //2.顶一个字符切片,存储从文件中读取的数据
    buffer := make([]byte, 1024*2)
    n, err := file.Read(buffer)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(n)
    fmt.Println(string(buffer[:n]))
}
func main() {
    //1.打开要读取的文件
    file, err := os.OpenFile("D:/Test/a.txt", os.O_RDONLY, 0)
    if err != nil {
        fmt.Println(err)
    }
    defer file.Close()
    //2.顶一个字符切片,存储从文件中读取的数据
    buffer := make([]byte, 10)
    for {
        n, err := file.Read(buffer)
        if err == io.EOF {
            break
        }
        fmt.Println(string(buffer[:n]))
    }

文件备份

func main() {
    //1.打开要读取的文件
    file1, err := os.Open("D:/Test/a.txt")
    if err != nil {
        fmt.Println(err)
    }
    defer file1.Close()
    //2.创建一个新的文件
    file2, err := os.Create("D:/Test/b.txt")
    if err != nil {
        fmt.Println(err)
    }
    defer file2.Close()

    //3.顶一个字符切片,存储从文件中读取的数据
    buffer1 := make([]byte, 10)
    for {
        n, err := file1.Read(buffer1)
        if err == io.EOF {
            break
        }
        file2.Write(buffer1[:n])
    }
}