golang 文件 文件夹 创建 读取 移动 复制 写入 遍历

目录

文件读取

创建 写入 移动 拷贝 删除 文件 创建文件夹

文件覆盖判断

遍历文件夹

权限


文件操作, 大体分为两部分:

os库 : 文件\文件夹创建,读取,移动,复制

io库 : 文件内容的写入,修改,拼接

文件读取

package main

import (
    "io/ioutil"
    "log"
)

func main() {
    // 读取文件内容
    file, _ := os.OpenFile("./demo_unicode.html", 2, 0666)
    fileByte1, _ = ioutil.ReadAll(file);

    // 读取文件内容,更简易的方法
    fileByte2, _ := ioutil.ReadFile("./demo_unicode.html")

    // byte转string
    fileString := string(fileByte2)
    log.Println(fileString)
}

创建 写入 移动 拷贝 删除 文件 创建文件夹

package main

import (
    "io"
    "os"
)

func main() {
    // 设定工作路径, 一般在项目刚开始设定一次即可, 不要在异步过程中修改工作路径
    // 默认是程序执行的路径
    os.Chdir("./")

    // 创建文件夹
    os.MkdirAll("./aa/bb/c1", 0777)
    os.MkdirAll("./aa/bb/c2", 0777)

    // 创建文件
    os.Create("./aa/bb/c1/file.go")

    // 移动文件
    os.Rename("./aa/bb/c1/file.go", "./aa/bb/c2/file.go")

    // 打开文件,得到一个 *File 对象, 用于后续的写入
    file, _ := os.OpenFile("./aa/bb/c2/file.go", 2, 0666)

    // 写入文件内容
    io.WriteString(file, `
        package main
        func main(){
            log.Println("我是由程序写入的代码")
        }
    `)

    // 也可以直接调用file里的函数写入内容
    file.WriteString("add string")

    // 拷贝文件, 拷贝其实就是创建一个文件, 然后写入文件内容
    src1, _ := os.Create("./aa/bb/c1/file-copy1.go")
    io.Copy(file, src1) // 把文件file, 写入src1文件

    // 删除文件或文件夹
    os.Create("./aa/bb/c1/file-delete.go") // 创建一个文件用于删除
    os.RemoveAll("./aa/bb/c1/file-delete.go")

}

文件覆盖判断

os.IsNotExist

当文件已存在时, 不管是os.Rename(), os.Create(), 还是io.WriteString() 都会对已存在的文件进行覆盖\修改,

如果需要安全的执行, 可以使用 os.Stat() 配合 os.IsNotExist() 做判断

package main

import (
    "io"
    "os"
)

func main() {
    os.MkdirAll("aa", 0777)

    // 创建了文件 testA, 并且写入了内容
    testA, _ := os.Create("aa/testA")
    io.WriteString(testA, "the teatA")
    // 如果需要安全判断, 可以使用 os.Stat 配合 os.IsNotExist
    if _, err := os.Stat("aa/testA"); os.IsNotExist(err) {
        // 当文件不存在, 才执行创建
        os.Create("aa/testA")
    }
    os.Chmod("aa/testA", 0777)
}

遍历文件夹

遍历文件夹可以使用 ioutil库 的ioutil.ReadDir, 会得到一个数组, 数组元素有文件的属性,

package main

import (
    "io/ioutil"
    "log"
)

func main() {
    fs, _ := ioutil.ReadDir("aa")
    for _, v := range fs {
        // 遍历得到文件名
        log.Println(v.Name())
        log.Println(v.IsDir())
    }
}

权限

可以使用 os.Chmod() 修改文件权限

// 所有人可读写权限
os.Chmod("aa/testA", 0666)

 

// 只读权限
os.Chmod("aa/testA", 0400)

Linux权限参考:

-rw------- (600)      只有拥有者有读写权限。
-rw-r--r-- (644)      只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700)     只有拥有者有读、写、执行权限。
-rwxr-xr-x (755)    拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711)    拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666)   所有用户都有文件读、写权限。
-rwxrwxrwx (777)  所有用户都有读、写、执行权限。

 

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值