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. 获取一个文件夹下所有的文件路径,获取一个路径的最后文件名
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
} }

  



最新文章

  1. Openfiler配置RAC共享存储
  2. Leetcode 笔记 36 - Sudoku Solver
  3. CentOS 6.4下PXE+Kickstart无人值守安装操作系统
  4. HTML5 CSS3学习
  5. JavaScript 回忆录
  6. hive 函数 Cube
  7. “SQLServerAgent当前未运行”问题解决
  8. windows系统添加删除用户命令!
  9. 【原】安装mongo的php插件
  10. linux第2天 信号 wait
  11. android studio里的build.gradle基本属性
  12. Win32下 Qt与Lua交互使用(四):在Lua脚本中自由执行Qt类中的函数
  13. 算法导论(第三版)习题Exercises4.3(第四章三节)算法导论的一个印刷错误
  14. [置顶] Jsp中的table多表头导出excel文件
  15. Guest与virtio netdev交互模式
  16. sublime text3 好用的插件!!!
  17. centOS7服务管理与启动流程
  18. 点击 Button触发事件将GridView1 CheckBox勾选的行添加到GridView2中
  19. 等价路由在路由器和CE交换机上默认的行为是不同的,路由器总是走第一个下一跳,CE交换机是逐包。
  20. SpringJMS解析-JmsTemplate

热门文章

  1. 创建具有root权限的账号
  2. 使用iframe实现上下窗口结构及登录页全窗口展示Demo
  3. SpringBoot 处理跨域请求问题
  4. 从源码角度解析 Springboot 2.6.2 的启动过程
  5. 【LeetCode】1110. Delete Nodes And Return Forest 解题报告 (C++)
  6. 【九度OJ】题目1195:最长&最短文本 解题报告
  7. 【LeetCode】932. Beautiful Array 解题报告(Python)
  8. 【LeetCode】647. Palindromic Substrings 解题报告(Python & C++)
  9. 【LeetCode】853. Car Fleet 解题报告(Python)
  10. 【剑指Offer】滑动窗口的最大值 解题报告(Python)