go语言path包和filepath包的学习和使用

目录

 

path包

path/filepath包


path包

package main

import (
	"fmt"
	"path"
)

func main() {
	//返回路径的最后一个元素
	fmt.Println(path.Base("./a/b/c")) // c
	//如果路径为空字符串,返回.
	fmt.Println(path.Base("")) // .
	//如果路径只有斜线,返回/
	fmt.Println(path.Base("///")) // /

	//返回等价的最短路径
	//1.用一个斜线替换多个斜线
	//2.清除当前路径.
	//3.清除内部的..和他前面的元素
	//4.以/..开头的,变成/
	fmt.Println(path.Clean("./a/b/../")) // a

	//返回路径最后一个元素的目录
	//路径为空则返回.
	fmt.Println(path.Dir("./a/b/c")) // a/b

	//返回路径中的扩展名
	//如果没有点,返回空
	fmt.Println(path.Ext("./a/b/c/d.jpg")) //  .jpg

	//判断路径是不是绝对路径
	fmt.Println(path.IsAbs("./a/b/c")) // false
	fmt.Println(path.IsAbs("/a/b/c"))  // true

	//连接路径,返回已经clean过的路径
	fmt.Println(path.Join("./a", "b/c", "../d/")) // a/b/d

	//匹配文件名,返回匹配结果和error, 完全匹配则返回true nil
	fmt.Println(path.Match("*", "a"))     //  true <nil>
	fmt.Println(path.Match("*", "a/b/c")) // false <nil>
	fmt.Println(path.Match("\\b", "b"))   // true <nil>

	//分割路径中的目录与文件
	fmt.Println(path.Split("./a/b/c/d.jpg")) //  ./a/b/c/ d.jpg
}

path/filepath包

package main

import (
	"fmt"
	"os"
	"path/filepath"
)

//filepath包兼容各操作系统的文件路径

func main() {

	fmt.Println("--filepath.Abs:")
	//返回所给路径的绝对路径
	path, _ := filepath.Abs("./1.txt")
	fmt.Println(path)

	fmt.Println("--filepath.Base:")
	//返回路径最后一个元素
	fmt.Println(filepath.Base("./1.txt"))	//  1.txt
	//如果路径为空字符串,返回.
	fmt.Println(filepath.Base(""))		//   .
	//如果路径只有斜线,返回/
	fmt.Println(filepath.Base("///"))

	//返回等价的最短路径
	//1.用一个斜线替换多个斜线
	//2.清除当前路径.
	//3.清除内部的..和他前面的元素
	//4.以/..开头的,变成/
	fmt.Println("--filepath.Clean:")
	fmt.Println(filepath.Clean("C:/a/b/../c"))
	fmt.Println(filepath.Clean("./1.txt"))

	//返回路径最后一个元素的目录
	//路径为空则返回.
	fmt.Println(filepath.Dir("./a/b/c"))
	fmt.Println(filepath.Dir("C:/a/b/c"))

	//返回链接文件的实际路径
	path2, _ := filepath.EvalSymlinks("1.lnk")
	fmt.Println(path2)

	//返回路径中的扩展名
	//如果没有点,返回空
	fmt.Println(filepath.Ext("./a/b/c/d.jpg"))

	//将路径中的/替换为路径分隔符
	fmt.Println(filepath.FromSlash("./a/b/c"))

	//返回所有匹配的文件
	match, _ := filepath.Glob("./*.go")
	fmt.Println(match)

	//判断路径是不是绝对路径
	fmt.Println(filepath.IsAbs("./a/b/c"))
	fmt.Println(filepath.IsAbs("C:/a/b/c"))

	//连接路径,返回已经clean过的路径
	fmt.Println(filepath.Join("C:/a", "/b", "/c"))

	//匹配文件名,完全匹配则返回true
	fmt.Println(filepath.Match("*", "a"))
	fmt.Println(filepath.Match("*", "C:/a/b/c"))
	fmt.Println(filepath.Match("\\b", "b"))

	//返回以basepath为基准的相对路径
	path3, _ := filepath.Rel("C:/a/b", "C:/a/b/c/d/../e")
	fmt.Println(path3)

	//将路径使用路径列表分隔符分开,见os.PathListSeparator
	//linux下默认为:,windows下为
	fmt.Println(filepath.SplitList("C:/windowsC:/windows/system"))

	//分割路径中的目录与文件
	dir, file := filepath.Split("C:/a/b/c/d.jpg")
	fmt.Println(dir, file)

	//将路径分隔符使用/替换
	fmt.Println(filepath.ToSlash("C:/a/b"))

	//返回分区名
	fmt.Println(filepath.VolumeName("C:/a/b/c"))

	//遍历指定目录下所有文件
	filepath.Walk("./", func(path string, info os.FileInfo, err error) error {
		fmt.Println(path)
		return nil
	})
}
发布了155 篇原创文章 · 获赞 74 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/HYZX_9987/article/details/103400018