golang中文件和路径用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package main
 
import (
    "fmt"
    "io/fs"
    "io/ioutil"
    "os"
    "path"
    "path/filepath"
)
 
func main() {
    // 文件和路径相关的功能包含了:os、path、filepath、ioutil包
 
    // 1. 创建文件夹
    // (1)创建单层目录,已存在则err有错
    err := os.Mkdir("x2", 0755)
    fmt.Println(err)
    // (2)创建多级目录,已存在则什么都不做
    err2 := os.MkdirAll("t2/src/code/test", 0755)
    fmt.Println(err2)
    // 另一种写法
    if err3 := os.Mkdir("x2", 0755); err3 == nil {
        fmt.Println("文件夹x2创建成功")
    } else {
        fmt.Println(err)
    }
    if err4 := os.MkdirAll("t2/src/code/test/xxx.go", 0755); err4 == nil {
        fmt.Println("文件夹t2/src/code/test创建成功")
    } else {
        fmt.Println(err)
    }
 
    // 2. 删除文件和文件夹
    // (1)删除文件或空文件夹,文件夹下存在文件则报错
    if err5 := os.Remove("x2"); err5 != nil {
        fmt.Println("删除失败", err5)
    } else {
        fmt.Println("删除成功")
    }
    // (2) 删除文件或文件夹(同时删除子目录)
    if err6 := os.RemoveAll("t1"); err6 != nil {
        fmt.Println("删除失败", err6)
    } else {
        fmt.Println("删除成功")
    }
 
    // 3. 路径是否存在
    // 判断文件或文件夹是否存在
    _, err7 := os.Stat("t2/src/code/test/xxx.go")
    if err7 != nil {
        // err7错误产生的原因有可能是不存在或者别的,所以需要再次判断一下是不存在导致的
        if os.IsNotExist(err7) {
            fmt.Println("文件或文件夹不存在")
        }
    } else {
        fmt.Println("文件或文件夹已存在")
    }
 
    // 4. 是否是文件夹
    fileObject, _ := os.Stat("t2/src/code/test")
    result := fileObject.IsDir()
    fmt.Println(result)
 
    // 5. 生成绝对路径
    absPath, _ := filepath.Abs("t2/src")
    fmt.Println(absPath)
 
    // 6. 获取上级目录
    absPath2, _ := filepath.Abs("t2")
    fmt.Println(absPath2)
    basePath := filepath.Dir(filepath.Dir(absPath2))
    fmt.Println(basePath)
 
    // 7. 遍历目录(一级)
    fileList, _ := ioutil.ReadDir("t2")
    for _, obj := range fileList {
        fmt.Println(obj.Name())
    }
 
    // 8. 遍历目录(多级)
    filepath.Walk("t2", func(path string, info fs.FileInfo, err error) error {
        if !info.IsDir() {
            fmt.Println("文件有", path)
        }
        return nil
    })
 
    // 9. 路径拼接
    filePath2 := path.Join("v1", "v2", "v3/v4", "v6.exe")
    fmt.Println(filePath2)
 
    // 10. 文件扩展名
    ext := path.Ext("/xxxx/xxx/xx/xx.txt")
    fmt.Println(ext)
 
}

  

2. 获取一个文件夹下所有的文件路径,获取一个路径的最后文件名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package main
 
import (
    "fmt"
    "path/filepath"
)
 
func main() {
    templatesDir := "./templates"
    // filepath.Glob 获取一个文件夹下所有的文件路径切片
    adminLayouts, _ := filepath.Glob(templatesDir + "/layouts/*")
    fmt.Println(adminLayouts)
    // 输出: [templates\layouts\base_admins.html templates\layouts\base_articles.html]
 
    adminInclude, _ := filepath.Glob(templatesDir + "/articles/*")
    for _, include := range adminInclude {
        layoutCopy := make([]string, len(adminLayouts))
        copy(layoutCopy, adminLayouts)
        files := append(layoutCopy, include)
        fmt.Println(files)
        // 输出:[templates\layouts\base_admins.html templates\layouts\base_articles.html templates\articles\article.html]
        // 输出:[templates\layouts\base_admins.html templates\layouts\base_articles.html templates\articles\index.html]
 
        // filepath.Base 获取一个路径的最后文件名
        fmt.Println(filepath.Base(include))
        // 输出:article.html
        // 输出:index.html
    }
 
}

  



posted @   专职  阅读(1327)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示