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
} }

  



golang中文件和路径用法的更多相关文章

  1. Golang中的RegExp正则表达式用法指南

    ------------------------------------------------------------ Golang中的正则表达式 ------------------------- ...

  2. golang中的reflect包用法

    最近在写一个自动生成api文档的功能,用到了reflect包来给结构体赋值,给空数组新增一个元素,这样只要定义一个input结构体和一个output的结构体,并填写一些相关tag信息,就能使用程序来生 ...

  3. golang中文件以及文件夹路径相关操作

    获取目录中所有文件使用包: io/ioutil 使用方法: ioutil.ReadDir 读取目录 dirmane 中的所有目录和文件(不包括子目录) 返回读取到的文件的信息列表和读取过程中遇到的任何 ...

  4. HyperSQL 链接参数中文件的路径

    如果我们在系统中配置下面的连接参数: spring.datasource.url=jdbc:hsqldb:file:~/db/cwiki-us-jpetstore 我们怎么知道 hsqldb 数据库的 ...

  5. 【解决了一个小问题】golang中引用一个路径较长的库,导致goland中出现"module contains a go.mod file, so major version must be compatible: should be v0 or v1, not v2"

    在项目中的go.mod文件中有这样一句: require ( github.com/xxx-devops/xx1/sdk/go v2.2.3 ) 项目的编译没有问题,但是goland中出现如下提示: ...

  6. golang中os/exec包用法

    exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout,并且利用pipe连接i/o. 1.func LookPath(file string) ( ...

  7. golang中的rpc包用法

    RPC,即 Remote Procedure Call(远程过程调用),说得通俗一点就是:调用远程计算机上的服务,就像调用本地服务一样. 我所在公司的项目是采用基于Restful的微服务架构,随着微服 ...

  8. golang中 "下划线" 的用法

    1.忽略返回值 这个应该是最简单的用途,比如某个函数返回三个参数,但是我们只需要其中的两个,另外一个参数可以忽略,这样的话代码可以这样写: v1, v2, _ := function(...) 2.用 ...

  9. linux rpm之已安装包校验、rpm包中文件提取

    已安装包校验 rpm -V 已安装的包名-V 校验指定rpm包中的文件 rpm -V pth没有任何提示,说明自安装后没有做过任何修改 rpm包中文件提取 比如对一个系统配置文件误操作,可以根据这个文 ...

随机推荐

  1. JAVA发送邮件报错,返回500 Error: bad syntax问题

    把项目部署在Linux系统的centos服务器,发送邮件报错了. 500 Error: bad syntax 处理办法 [root@master bin]# hostname master 显示 ma ...

  2. 【LeetCode】1200. Minimum Absolute Difference 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 排序 日期 题目地址:https://leetcode ...

  3. 【LeetCode】66. Plus One 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 数九 采用进位 日期 [LeetCode] 题目地址 ...

  4. 1266 - Points in Rectangle

    1266 - Points in Rectangle    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 3 ...

  5. 【C++】关键字回忆leetcode题解

    20200515 前缀和 no.560 20200518 动态规划 no.152 20200520 状态压缩 no.1371 20200521 中心扩散 no.5 20200523 滑动窗口 no.7 ...

  6. 「HAOI 2006」数字序列

    Description 给定一长度为 \(n\) 的数列 \(a\),可将 \(a_i\) 改为任意整数 \(k\),代价为 \(\mid a_i-k\mid\). 问最少改变多少个数能把它变成一个单 ...

  7. Java实习生常规技术面试题每日十题Java基础(六)

    目录 1.在Java语言,怎么理解goto. 2.请描述一下Java 5有哪些新特性? 3.Java 6新特性有哪些. 4.Java 7 新特性有哪些. 5.Java 8 新特性有哪些. 6.描述Ja ...

  8. Java初学者作业——编写 Java 程序,在控制台中输入日期,计算该日期是对应年份的第几天。

    返回本章节 返回作业目录 需求说明: 编写 Java 程序,在控制台中输入日期,计算该日期是对应年份的第几天. 实现思路: (1)声明变量 year.month和 date,用于存储日期中的年.月.日 ...

  9. java -jar 指定logback.xml、application.yaml

    java -jar 指定logback.xml -Dlogging.config="C:\logbacs\logback.xml" 示例:java -jar   -Dlogging ...

  10. Eclipse控制台Console使用说明

    1.说明 本文详细介绍Eclipse控制台Console使用说明, 调试时通过控制台查看日志, 有时候日志太多会找不到上面的日志, 有时候几个控制台会不受控制的弹出, 那么请参考本文, 通过调整Ecl ...