golang中path和filepath文件路径路径处理库相关函数使用示例和总结

在go语言的内置包path和filepath包中为我们提供了文件路径处理的相关使用函数, filepath包中包含 所有path包中的函数,他们的用法基本一致,其中我们最为常用的函数如 Join, Dir, Base, Clean, Ext,Split等给我们的go语言开发中的文件路径处理方法提供了非常实用的功能。下面分别介绍他们的函数原型和使用示例。

path包中的函数和使用示例

函数原型说明和使用示例

func Join(elem ...string) string

Join函数可以将任意数量的路径元素放入一个单一路径里,会根据需要添加斜杠。结果是经过简化的,所有的空字符串元素会被忽略。

path.Join("a", "b", "c") 结果:a/b/c

func Dir(path string) string

Dir返回路径除去最后一个路径元素的部分,即该路径最后一个元素所在的目录。在使用Split去掉最后一个元素后,会简化路径并去掉末尾的斜杠。如果路径是空字符串,会返回".";如果路径由1到多个斜杠后跟0到多个非斜杠字符组成,会返回"/";其他任何情况下都不会返回以斜杠结尾的路径。

path.Dir("/a/b/c") 结果:/a/b

func Base(path string) string

Base函数返回路径的最后一个元素。在提取元素前会求掉末尾的斜杠。如果路径是"",会返回".";如果路径是只有一个斜杆构成,会返回"/"。

path.Base("/a/b") 结果:b

func Ext(path string) string

Ext函数返回path文件扩展名。返回值是路径最后一个斜杠分隔出的路径元素的最后一个'.'起始的后缀(包括'.')。如果该元素没有'.'会返回空字符串。

path.Ext("/a/b/c/bar.css") 结果:.css

func Clean(path string) string

Clean函数通过单纯的词法操作返回和path代表同一地址的最短路径。

它会不断的依次应用如下的规则,直到不能再进行任何处理:

1. 将连续的多个斜杠替换为单个斜杠

2. 剔除每一个.路径名元素(代表当前目录)

3. 剔除每一个路径内的..路径名元素(代表父目录)和它前面的非..路径名元素

4. 剔除开始一个根路径的..路径名元素,即将路径开始处的"/.."替换为"/"

只有路径代表根地址"/"时才会以斜杠结尾。如果处理的结果是空字符串,Clean会返回"."。

 path.Clean("/../a/c") 结果:/a/c

func IsAbs(path string) bool

IsAbs返回路径是否是一个绝对路径。

path.IsAbs("/dev/null")  结果:true

func Split(path string) (dir, file string)

Split函数将路径从最后一个斜杠后面位置分隔为两个部分(dir和file)并返回。这个相当于 Die,和Base函数一起用。

如果路径中没有斜杠,函数返回值dir会设为空字符串,file会设为path。两个返回值满足path == dir+file。

dir, file := path.Split("static/myfile.css") 结果: dir: "static/", file: "myfile.css"

func Match(pattern, name string) (matched bool, err error)

如果name匹配shell文件名模式匹配字符串,Match函数返回真。

path.Match("a*", "abc") 结果:true nil

filepath常用函数示例

上面path包中的所有函数在filepath中都有,且使用方式和作用一样,这里不做重复。  最常用的有 Base, Dir, Ext,  Clean, Split 等 这些个函数的使用一定要学会,方面见上面path中的使用方法。

文件树遍历,Walk/WalkDir不会处理软链接

func Walk(root string, fn WalkFunc) error

遍历指定目录root下的文件树,为树中的每个文件或目录(包括根目录)调用fn。

Walk的效率不如Go 1.16中引入的WalkDir,后者避免了在每个访问的文件或者目录上调用os.Lstat

func WalkDir(root string, fn fs.WalkDirFunc) error

作用和walk一样,

WalkDir在带调用fn的的路径处理总是使用操作系统中合适的分隔符,这个和io/fs.WalkDir不同,他们总是使用斜杠来处理路径。

filepath包中的函数定义

func Abs(path string) (string, error)

func Base(path string) string 获取文件名

func Clean(path string) string 清理路径

func Dir(path string) string 获取目录

func EvalSymlinks(path string) (string, error)

func Ext(path string) string 获取文件扩展名

func FromSlash(path string) string

func Glob(pattern string) (matches []string, err error) 根据模式匹配文件列表

func HasPrefix(p, prefix string) boolDEPRECATED

func IsAbs(path string) bool 检测是否绝对路径

func IsLocal(path string) bool

func Join(elem ...string) string

func Match(pattern, name string) (matched bool, err error)

func Rel(basepath, targpath string) (string, error)

func Split(path string) (dir, file string)

func SplitList(path string) []string

func ToSlash(path string) string

func VolumeName(path string) string 这个win下面使用返回盘符名称如 "C:\foo\bar" 返回 C:

func Walk(root string, fn WalkFunc) error  遍历root目录中的每个文件和目录包括自己,然后将每个文件和目的都调用 fn函数

func WalkDir(root string, fn fs.WalkDirFunc) error  

WalkFunc函数变量定义

type WalkFunc func(path string, info fs.FileInfo, err error) error

参考 

filepath package - path/filepath - Go Packages

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值