golang中文件和路径用法

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
	}

}

  



posted @ 2021-10-17 11:48  专职  阅读(1294)  评论(0编辑  收藏  举报