package FileUtil import ( "fmt" "io" "io/ioutil" "log" "os" "path/filepath" "strings" ) /** 功能:写入文件内容 作者:黄海 时间:2020-04-24 */ func WriteFileContent(filepath string, content string) error { contentByte := []byte(content) err := ioutil.WriteFile(filepath, contentByte, 0644) return err } /** 功能:读取文件内容 作者:黄海 时间:2019-12-31 */ func ReadFileContent(filepath string) string { file, err := os.Open(filepath) if err != nil { log.Print("文件打开失败:", err) } defer file.Close() buf := make([]byte, 12) // 存放文件内容的缓存,相当于中转站 data := make([]byte, 0) // 用来存放文件内容,buf读取的内容都会写到data里面去 for { //无限循环,不断读取 n, err := file.Read(buf) // 什么时候文件读完呢?如果文件读完的话,那么err不为nil,而是io.EOF // 所以我们可以进行判断 if err != nil { //如果err != nil说明出错了,但如果还等于io.EOF的话,说明读完了,因为文件读完,err也不为nil。直接break if err == io.EOF { break } else { //如果错误不是io.EOF的话,说明就真的在读取中出现了错误,直接panic出来 panic(err) } } //此时文件内容写到buf里面去了,写了多少个呢?写了n个,那么我们再写到data里面去 data = append(data, buf[:n]...) } return string(data) } //获取指定目录下的所有文件,不进入下一级目录搜索,可以匹配后缀过滤。 func ListDir(dirPth string, suffix string) (files []string, err error) { files = make([]string, 0, 10) dir, err := ioutil.ReadDir(dirPth) if err != nil { return nil, err } PthSep := string(os.PathSeparator) suffix = strings.ToUpper(suffix) //忽略后缀匹配的大小写 for _, fi := range dir { if fi.IsDir() { // 忽略目录 continue } if strings.HasSuffix(strings.ToUpper(fi.Name()), suffix) { //匹配文件 files = append(files, dirPth+PthSep+fi.Name()) } } return files, nil } //获取指定目录及所有子目录下的所有文件,可以匹配后缀过滤。 func WalkDir(dirPth, suffix string) (files []string, err error) { files = make([]string, 0, 30) suffix = strings.ToUpper(suffix) //忽略后缀匹配的大小写 err = filepath.Walk(dirPth, func(filename string, fi os.FileInfo, err error) error { //遍历目录 if err != nil { //忽略错误 fmt.Println(err) return err } if fi.IsDir() { // 忽略目录 return nil } if strings.HasSuffix(strings.ToUpper(fi.Name()), suffix) { files = append(files, filename) } return nil }) return files, err }