goProject/trunk/goutil/fileUtil/file.go
皮蛋13361098506 1b77f62820 初始化项目
2025-01-06 16:01:02 +08:00

299 lines
6.0 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package fileUtil
import (
"bufio"
"io"
"io/ioutil"
"os"
"os/exec"
"path/filepath"
"strings"
"sync"
)
var (
mutex sync.Mutex
)
// 文件是否存在
// 文件路径
// 返回值:
// 是否存在
// 错误对象
func IsFileExists(path string) (bool, error) {
file, err := os.Stat(path)
if err == nil {
return file.IsDir() == false, nil
} else {
if os.IsNotExist(err) {
return false, nil
}
}
return true, err
}
// 文件夹是否存在
// 文件夹路径
// 返回值:
// 是否存在
// 错误对象
func IsDirectoryExists(path string) (bool, error) {
file, err := os.Stat(path)
if err == nil {
return file.IsDir(), nil
} else {
if os.IsNotExist(err) {
return false, nil
}
}
return true, err
}
// 文件夹是否存在(obsolete)
// 文件夹路径
// 返回值:
// 是否存在
func IsDirExists(path string) bool {
file, err := os.Stat(path)
if err != nil {
return false
} else {
return file.IsDir()
}
}
// 获取当前路径
// 返回值:
// 当前路径
func GetCurrentPath() string {
file, _ := exec.LookPath(os.Args[0])
fileAbsPath, _ := filepath.Abs(file)
return filepath.Dir(fileAbsPath)
}
// 获取目标文件列表(完整路径)
// path文件夹路径
// 返回值:文件列表(完整路径)
func GetFileList(path string) (fileList []string, err error) {
if exists, err1 := IsDirectoryExists(path); err1 != nil {
err = err1
return
} else if !exists {
return
}
// 遍历目录,获取所有文件列表
err = filepath.Walk(path, func(fileName string, fi os.FileInfo, err error) error {
if err != nil {
return err
}
// 忽略目录
if fi.IsDir() {
return nil
}
// 添加到列表
fileList = append(fileList, fileName)
return nil
})
return
}
// 获取目标文件列表(完整路径)
// path文件夹路径
// prefix文件前缀
// suffix文件后缀
// 返回值:文件列表(完整路径)
func GetFileList2(path, prefix, suffix string) (fileList []string, err error) {
if exists, err1 := IsDirectoryExists(path); err1 != nil {
err = err1
return
} else if !exists {
return
}
// 遍历目录,获取所有文件列表
err = filepath.Walk(path, func(fileName string, fi os.FileInfo, err error) error {
if err != nil {
return err
}
// 忽略目录
if fi.IsDir() {
return nil
}
// 添加到列表
baseName := filepath.Base(fileName)
if prefix != "" && strings.HasPrefix(baseName, prefix) == false {
return nil
}
if suffix != "" && strings.HasSuffix(baseName, suffix) == false {
return nil
}
fileList = append(fileList, fileName)
return nil
})
return
}
// 按行读取每一个文件的内容
// fileName:文件的绝对路径
// 返回值:
// 行内容列表
// 错误信息
func ReadFileLineByLine(fileName string) (lineList []string, err error) {
// 打开文件
file, err1 := os.Open(fileName)
if err1 != nil {
err = err1
return
}
defer file.Close()
// 读取文件
buf := bufio.NewReader(file)
for {
// 按行读取
line, _, err2 := buf.ReadLine()
if err2 == io.EOF {
break
}
//将byte[]转换为string并添加到列表中
lineList = append(lineList, string(line))
}
return
}
// 读取文件内容(字符串)
// fileName文件的绝对路径
// 返回值:
// 文件内容
// 错误信息
func ReadFileContent(fileName string) (content string, err error) {
bytes, err1 := ioutil.ReadFile(fileName)
if err1 != nil {
err = err1
return
}
content = string(bytes)
return
}
// 读取文件内容(字符数组)
// fileName文件的绝对路径
// 返回值:
// 文件内容
// 错误信息
func ReadFileBytes(fileName string) (content []byte, err error) {
content, err = ioutil.ReadFile(fileName)
return
}
// 写入文件
// filePath文件夹路径
// fileName文件名称
// ifAppend是否追加内容
// args可变参数
// 返回值:
// error:错误信息
func WriteFile(filePath, fileName string, ifAppend bool, args ...string) error {
// 得到最终的fileName
fileName = filepath.Join(filePath, fileName)
// 判断文件夹是否存在,如果不存在则创建
mutex.Lock()
if !IsDirExists(filePath) {
os.MkdirAll(filePath, os.ModePerm|os.ModeTemporary)
}
mutex.Unlock()
// 打开文件(如果文件存在就以写模式打开,并追加写入;如果文件不存在就创建,然后以写模式打开。)
var f *os.File
var err error
if ifAppend == false {
f, err = os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.ModePerm|os.ModeTemporary)
} else {
f, err = os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, os.ModePerm|os.ModeTemporary)
}
if err != nil {
return err
}
defer f.Close()
// 写入内容
for _, arg := range args {
_, err = f.WriteString(arg)
if err != nil {
return err
}
}
return nil
}
// 写入文件
// filePath文件夹路径
// fileName文件名称
// ifAppend是否追加内容
// args可变参数
// 返回值:
// error:错误信息
func WriteFile4Byte(filePath, fileName string, ifAppend bool, args ...[]byte) error {
// 得到最终的fileName
fileName = filepath.Join(filePath, fileName)
// 判断文件夹是否存在,如果不存在则创建
mutex.Lock()
if !IsDirExists(filePath) {
os.MkdirAll(filePath, os.ModePerm|os.ModeTemporary)
}
mutex.Unlock()
// 打开文件(如果文件存在就以写模式打开,并追加写入;如果文件不存在就创建,然后以写模式打开。)
var f *os.File
var err error
if ifAppend == false {
f, err = os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.ModePerm|os.ModeTemporary)
} else {
f, err = os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, os.ModePerm|os.ModeTemporary)
}
if err != nil {
return err
}
defer f.Close()
// 写入内容
for _, arg := range args {
_, err = f.Write(arg)
if err != nil {
return err
}
}
return nil
}
// 删除文件
// fileName文件的绝对路径
// 返回值:
// 错误对象
func DeleteFile(fileName string) error {
return os.Remove(fileName)
}