path包和filepath包的学习
path包
直接看实例:
package main
import (
"fmt"
"path"
)
func main() {
//返回路径的最后一个元素
fmt.Println("path.Base")
fmt.Println(path.Base("./a/b/c"))
fmt.Println(path.Base("\\a\\b\\c"))
fmt.Println(path.Base(""))
fmt.Println(path.Base("///"))
fmt.Println()
//返回等价的最短路径
//1.用一个斜线替换多个斜线
//2.清除当前路径.
//3.清除内部的..和他前面的元素
//4.以/..开头的,变成/
fmt.Println("path.Clean")
fmt.Println(path.Clean("./a/b/../"))
fmt.Println(path.Clean("../a/../b/../"))
fmt.Println(path.Clean("/a///b///c/"))
fmt.Println()
//返回最后一个目录分隔符之前的路径
//路径为空则返回.
//最后调用了clean输出
fmt.Println("path.Dir")
fmt.Println(path.Dir("./a/b/c"))
fmt.Println(path.Dir(""))
fmt.Println(path.Dir("../a///b//../c//d../"))
fmt.Println()
//返回路径中的扩展名
//如果没有点,返回空
fmt.Println("path.Ext")
fmt.Println(path.Ext("./a/b/c/d.jpg"))
fmt.Println(path.Ext("/a/b.txt"))
fmt.Println()
//判断路径是不是绝对路径
fmt.Println("path.IsAbs")
fmt.Println(path.IsAbs("./a/b/c"))
fmt.Println(path.IsAbs("/a/b/c"))
fmt.Println()
//连接路径
//返回已经clean过的路径
fmt.Println("path.Join")
fmt.Println(path.Join("./a", "/b/../c", "../d/c/f/g","/a"))
fmt.Println(path.Join("./a", "b/c", "../d/"))
fmt.Println(path.Join(""))
fmt.Println()
//匹配文件名,完全匹配则返回true
fmt.Println("path.Match")
fmt.Println(path.Match("*", "a"))
fmt.Println(path.Match("/a/b/c/123.txt", "123.txt"))
fmt.Println(path.Match("/a/b/c/123.txt", "/a/b/c/123.txt"))
fmt.Println(path.Match("\\b", "b"))
fmt.Println()
//分割路径中的目录与文件
fmt.Println("path.Split")
fmt.Println(path.Split("./a/b/c/d.jpg"))
fmt.Println(path.Split("./a/b/c.txt/d.jpg"))
}
其中path.Dir和path.Join最后都是调用clean来返回。
filepath包filepath包里有很多的作用都是和path里的类似:
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
//返回所给路径的绝对路径
fmt.Println("filepath.Abs")
path, _ := filepath.Abs("./1.txt")
fmt.Println(path)
fmt.Println()
//返回路径最后一个元素
fmt.Println("filepath.Base")
fmt.Println(filepath.Base("./a/b/c"))
fmt.Println(filepath.Base("\\a\\b\\c"))
fmt.Println(filepath.Base(""))
fmt.Println(filepath.Base("///"))
fmt.Println()
//返回等价的最短路径
//1.用一个斜线替换多个斜线
//2.清除当前路径.
//3.清除内部的..和他前面的元素
//4.以/..开头的,变成/
fmt.Println("filepath.Clean")
fmt.Println(filepath.Clean("./a/b/../"))
fmt.Println(filepath.Clean("../a/../b/../"))
fmt.Println(filepath.Clean("/a///b///c/"))
fmt.Println()
//返回最后一个目录分隔符之前的路径
//路径为空则返回.
//最后调用了clean输出
fmt.Println("filepath.Dir")
fmt.Println(filepath.Dir("./a/b/c"))
fmt.Println(filepath.Dir(""))
fmt.Println(filepath.Dir("../a///b//../c//d../"))
fmt.Println()
//返回链接文件的实际路径
fmt.Println("filepath.EvalSymlink")
path2, _ := filepath.EvalSymlinks("1.lnk")
fmt.Println(path2)
fmt.Println()
//返回路径中的扩展名
//如果没有点,返回空
fmt.Println("filepath.Ext")
fmt.Println(filepath.Ext("./a/b/c/d.jpg"))
fmt.Println(filepath.Ext("/a/b.txt"))
fmt.Println()
//将路径中的/替换为路径分隔符
fmt.Println("filepath.FromSlash")
fmt.Println(filepath.FromSlash("./a/b/c"))
fmt.Println(filepath.FromSlash("/a/../b/c//d"))
fmt.Println()
//返回所有匹配的文件
fmt.Println("filepath.Glob")
match, _ := filepath.Glob("./*.go")
fmt.Println(match)
fmt.Println()
//判断路径是不是绝对路径
fmt.Println("filepath.IsAbs")
fmt.Println(filepath.IsAbs("./a/b/c"))
fmt.Println(filepath.IsAbs("/a/b/c"))
fmt.Println()
//连接路径,返回已经clean过的路径
//连接路径
//返回已经clean过的路径
fmt.Println("filepath.Join")
fmt.Println(filepath.Join("./a", "/b/../c", "../d/c/f/g","/a"))
fmt.Println(filepath.Join("./a", "b/c", "../d/"))
fmt.Println(filepath.Join(""))
fmt.Println()
//匹配文件名,完全匹配则返回true
fmt.Println("filepath.Match")
fmt.Println(filepath.Match("*", "a"))
fmt.Println(filepath.Match("/a/b/c/123.txt", "123.txt"))
fmt.Println(filepath.Match("/a/b/c/123.txt", "/a/b/c/123.txt"))
fmt.Println(filepath.Match("\\b", "b"))
fmt.Println()
//返回以basepath为基准的相对路径
fmt.Println("filepath.Rel")
path3, _ := filepath.Rel("C:/a/b", "C:/a/b/c/d/../e")
fmt.Println(path3)
fmt.Println()
//将路径使用路径列表分隔符分开,见os.PathListSeparator
//linux下默认为:,windows下为;
fmt.Println("filepath.SplitList")
fmt.Println(filepath.SplitList("C:/windows;C:/windows/system"))
fmt.Println()
//分割路径中的目录与文件
fmt.Println("filepath.Split")
dir, file := filepath.Split("C:/a/b/c/d.jpg")
fmt.Println(dir, file)
fmt.Println()
//将路径分隔符使用/替换
fmt.Println("filepath.ToSlash")
fmt.Println(filepath.ToSlash("C:/a/b"))
fmt.Println()
//返回分区名
fmt.Println("filepath.VolumeName")
fmt.Println(filepath.VolumeName("C:/a/b/c"))
fmt.Println()
//遍历指定目录下所有文件
fmt.Println("filepath.Walk")
filepath.Walk("./", func(path string, info os.FileInfo, err error) error {
fmt.Println(path)
return nil
})
}