微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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",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)  所有用户都有读、写、执行权限。

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐